更新時(shí)間:2021年06月07日15時(shí)28分 來源:傳智教育 瀏覽次數(shù):
通常情況下,JDBC的使用可以按照以下幾個(gè)步驟進(jìn)行:
(1) 加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)
加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)通常使用Class類的靜態(tài)方法forName()來實(shí)現(xiàn),具體實(shí)現(xiàn)方式如下:
Class.forName("DriverName");
在上述代碼中,DriverName就是數(shù)據(jù)庫(kù)驅(qū)動(dòng)類所對(duì)應(yīng)的字符串。例如,要加載MySQL數(shù)據(jù)庫(kù)的驅(qū)動(dòng)可以采用如下代碼:
Class.forName("com.mysql.jdbc.Driver");
加載Oracle數(shù)據(jù)庫(kù)的驅(qū)動(dòng)可以采用如下代碼:
Class.forName("oracle.jdbc.driver.OracleDriver");
從上面兩種加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)的代碼可以看出,在加載驅(qū)動(dòng)時(shí)所加載的并不是真正使用數(shù)據(jù)庫(kù)的驅(qū)動(dòng)類,而是數(shù)據(jù)庫(kù)驅(qū)動(dòng)類名的字符串。
(2) 通過DriverManager獲取數(shù)據(jù)庫(kù)連接
DriverManager中提供了一個(gè)getConnection()方法來獲取數(shù)據(jù)庫(kù)連接,獲取方式如下:
Connection conn = DriverManager.getConnection(String url, String user, String pwd);
從上述代碼可以看出,getConnection()方法中有3個(gè)參數(shù),它們分別表示連接數(shù)據(jù)庫(kù)的URL、登錄數(shù)據(jù)庫(kù)的用戶名和密碼。其中用戶名和密碼通常由數(shù)據(jù)庫(kù)管理員設(shè)置,而連接數(shù)據(jù)庫(kù)的URL則遵循一定的寫法。以MySQL數(shù)據(jù)庫(kù)為例,其地址的書寫格式如下:
jdbc:mysql://hostname:port/databasename
上面代碼中,jdbc:mysql:是固定的寫法,mysql指的是MySQL數(shù)據(jù)庫(kù)。hostname指的是主機(jī)的名稱(如果數(shù)據(jù)庫(kù)在本機(jī)上,hostname可以為localhost或127.0.0.1,如果在其他機(jī)器上,那么hostname為所要連接機(jī)器的IP地址),port指的是連接數(shù)據(jù)庫(kù)的端口號(hào)(MySQL端口號(hào)默認(rèn)為3306),databasename指的是MySQL中相應(yīng)數(shù)據(jù)庫(kù)的名稱。
(3) 通過Connection對(duì)象獲取Statement對(duì)象
Connection創(chuàng)建Statement的方式有如下三種:
● createStatement():創(chuàng)建基本的Statement對(duì)象。
● prepareStatement(String sql):根據(jù)傳遞的SQL語(yǔ)句創(chuàng)建PreparedStatement對(duì)象。
● prepareCall(String sql):根據(jù)傳入的SQL語(yǔ)句創(chuàng)建CallableStatement對(duì)象。
以創(chuàng)建基本的Statement對(duì)象為例,其創(chuàng)建方式如下:
Statement stmt = conn.createStatement();
(4) 使用Statement執(zhí)行SQL語(yǔ)句
所有的Statement都有如下三種執(zhí)行SQL語(yǔ)句的方法:
● execute(String sql):用于執(zhí)行任意的SQL語(yǔ)句。
● executeQuery(String sql):用于執(zhí)行查詢語(yǔ)句,返回一個(gè)ResultSet結(jié)果集對(duì)象。
● executeUpdate(String sql):主要用于執(zhí)行DML(數(shù)據(jù)操作語(yǔ)言)和DDL(數(shù)據(jù)定義語(yǔ)言)語(yǔ)句。執(zhí)行DML語(yǔ)句(INSERT、UPDATE或DELETE)時(shí),會(huì)返回受SQL語(yǔ)句影響的行數(shù),執(zhí)行DDL(CREATE、ALTER)語(yǔ)句返回0。
以executeQuery()方法為例,其使用方式如下:
// 執(zhí)行SQL語(yǔ)句,獲取結(jié)果集ResultSet ResultSet rs = stmt.executeQuery(sql);
(5) 操作ResultSet結(jié)果集
如果執(zhí)行的SQL語(yǔ)句是查詢語(yǔ)句,執(zhí)行結(jié)果將返回一個(gè)ResultSet對(duì)象,該對(duì)象里保存了SQL語(yǔ)句查詢的結(jié)果。程序可以通過操作該ResultSet對(duì)象來取出查詢結(jié)果。
(6) 關(guān)閉連接,釋放資源
每次操作數(shù)據(jù)庫(kù)結(jié)束后都要關(guān)閉數(shù)據(jù)庫(kù)連接,釋放資源,以重復(fù)利用資源。需要注意的是,通常資源的關(guān)閉順序與打開順序相反,順序是ResultSet、Statement(或PreparedStatement)和Connection。為了保證在異常情況下也能關(guān)閉資源,需要在try...catch的finally代碼塊中統(tǒng)一關(guān)閉資源。
至此,JDBC程序的大致實(shí)現(xiàn)步驟已經(jīng)講解完成。
數(shù)據(jù)庫(kù)連接池、Spring JDBC和HTML
如何實(shí)現(xiàn)JDK動(dòng)態(tài)代理?案例演示JDK動(dòng)態(tài)代理實(shí)現(xiàn)過程
北京校區(qū)