JDBC

基本概念:JDBC(Java DataBase Connectivity,java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的Java API喻鳄,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問趟咆,它由一組用Java語言編寫的類和接口組成唆涝。JDBC提供了一種基準,據(jù)此可以構(gòu)建更高級的工具和接口寇钉,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應(yīng)用程序虚循。

一袭祟、數(shù)據(jù)庫連接

1.加載數(shù)據(jù)庫驅(qū)動類

  (1)在工程下新建lib文件夾亏掀,將 ojdbc6.jar(jar包在:E:\oracle\product\11.2.0\dbhome_1\jdbc\lib)拷貝至該目錄下

  (2)右鍵ojdbc6.jar文件缸榄,build path --> add too build path

  (3)將驅(qū)動類加載到內(nèi)存中

          Class.forName("oracle.jdbc.driver.OracleDriver");

2.JDBC連接字符串

MySQL:

String Driver="com.mysql.jdbc.Driver"; //驅(qū)動程序

String URL="jdbc:mysql://localhost:3306/db_name"; //連接的URL,db_name為數(shù)據(jù)庫名

String Username="username"; //用戶名

String Password="password"; //密碼

Class.forName(Driver);

Connection con=DriverManager.getConnection(URL,Username,Password);

Oracle:


String Driver="oracle.jdbc.driver.OracleDriver";  //連接數(shù)據(jù)庫的方法

String URL="jdbc:oracle:thin:@localhost:1521:orcl";  //orcl為數(shù)據(jù)庫的SID

String Username="username"; //用戶名

String Password="password"; //密碼

Class.forName(Driver) ; //加載數(shù)據(jù)庫驅(qū)動

Connection con=DriverManager.getConnection(URL,Username,Password); //常用數(shù)據(jù)庫鏈接方式

3.獲取數(shù)據(jù)庫連接對象

  Connection conn = DriverManager.getConnection(url,user,password);

4.寫sql

  String sql = "xxxxxx";

5.創(chuàng)建PreparedStatement對象

  PreparedStatement ps  = conn.prepareStatement(sql);

6.執(zhí)行查詢返回ResultSet結(jié)果集對象

  ResultSet rs = ps.executeQuery();

7.遍歷結(jié)果集渤弛,獲取查詢結(jié)果

  while(rs.next){

          rs.getXxx()

  }

8.釋放資源

  rs.close()

  ps.close()

  conn.close()

例:


package cn.mystudy;

import java.sql.Connection;

import java.sql.DatabaseMetaData;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

public class TestJDBC {

public static void main(String[] args) {

try {

Class.forName("oracle.jdbc.driver.OracleDriver");

String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";

String user = "SCOTT";

String password = "0128";

Connection conn = DriverManager.getConnection(url,user,password);

String sql = "select * from emp where deptno = ?";

PreparedStatement ps = conn.prepareStatement(sql);

ps.setInt(1, 20);

ResultSet rs = ps.executeQuery();

while(rs.next()){

System.out.println(rs.getInt("empno"));

      }

rs.close();

    ps.close();

    conn.close();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

二、JDBC的封裝
新建一個util包甚带,然后在其下面建立DBUtil.java

package util;


import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class DBUtil {
    private static String DRIVER = "";
    private static String URL = "";
    private static String USER = "";
    private static String PASSWORD = "";
    static{
        try {
            InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties");
            Properties prop = new Properties();
            prop.load(in);
            DRIVER = prop.getProperty("driver");
            URL = prop.getProperty("url");
            USER = prop.getProperty("user");
            PASSWORD = prop.getProperty("password");
            Class.forName(DRIVER);
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("配置文件讀取失敗");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        
    }
    
    public static Connection getConnection() {
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(URL,USER,PASSWORD);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
        
    }
    
    public static void close(Connection conn,Statement ps) {
        if (ps !=null) {
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }   
        }
        if (conn !=null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }   
        }       
    }
    public static void close(Connection conn,Statement ps,ResultSet rs) {
        if (rs!=null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (ps!=null) {
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn!=null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
    }
}

在根目錄下建立db.properties文件

# do not write space
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
user=SCOTT
password=0128

# mysql db
#driver=com.mysql.jdbc.Driver
#url=jdbc:mysql://localhost:3306/db_name
#user=root
#password=1234

使用DBUtil.java

package cn.mystudy;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import util.DBUtil;

public class TestJDBC2 {
    
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            conn = DBUtil.getConnection();
            String sql = "select * from emp where deptno = ?";
            ps = conn.prepareStatement(sql);
            ps.setInt(1, 20);
            rs=ps.executeQuery();
            while (rs.next()) {
                System.out.println(rs.getInt("empno"));             
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtil.close(conn, ps, rs);
        }
    }   
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末她肯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鹰贵,更是在濱河造成了極大的恐慌晴氨,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碉输,死亡現(xiàn)場離奇詭異籽前,居然都是意外死亡,警方通過查閱死者的電腦和手機敷钾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門枝哄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人阻荒,你說我怎么就攤上這事挠锥。” “怎么了财松?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵瘪贱,是天一觀的道長。 經(jīng)常有香客問我辆毡,道長菜秦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任舶掖,我火速辦了婚禮球昨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘眨攘。我一直安慰自己主慰,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布鲫售。 她就那樣靜靜地躺著共螺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪情竹。 梳的紋絲不亂的頭發(fā)上藐不,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機與錄音,去河邊找鬼雏蛮。 笑死涎嚼,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挑秉。 我是一名探鬼主播法梯,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼犀概!你這毒婦竟也來了立哑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤阱冶,失蹤者是張志新(化名)和其女友劉穎刁憋,沒想到半個月后滥嘴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體木蹬,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年若皱,在試婚紗的時候發(fā)現(xiàn)自己被綠了镊叁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡走触,死狀恐怖晦譬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情互广,我是刑警寧澤敛腌,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站惫皱,受9級特大地震影響像樊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜旅敷,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一生棍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧媳谁,春花似錦涂滴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至锤躁,卻和暖如春搁料,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工加缘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鸭叙,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓拣宏,卻偏偏與公主長得像沈贝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子勋乾,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355