天天看點

Java學習筆記之JDBC

JDBC的一般流程:

1、加載資料庫驅動類:Class.forName(driverclass),其中driverclass為驅動類,如"com.mysql.jdbc.Driver"。

2、通過DriverManager擷取資料庫連接配接:

Collection conn = DriverManager.getConnection(String url,String user,String passwd),參數分别為資料庫位址(有格式),使用者名和密碼。

3、通過Connection建立Statement對象,有以下三個方法:

a. createStatement():建立基本的Statement對象;跳到第四步。

b. prepareStatement(String sql):建立預編譯的Statement對象;跳到第八步。

c. prepareCall(String sql):存儲過程,這裡不講理。

4、Statement stmt = conn.createStatement();

5、用Statement執行sql語句,常用:

a. executeUpdate(String sql);涉及增删改的sql,傳回受影響行數

b. executeQuery(String sql);涉及查詢的sql,傳回結果集ResultSet對象。

6、管理結果集:

a. next(),previous(),first(),last(),absolute()等方法移動記錄指針;

b. getXxx擷取記錄指針指向行、特定列的值。

常用的周遊方法:

while(rs.next()){

System.out.println(rs.getInt(1) + "\t" + rs.getString(2));

}

7、回收資料庫資源,在Java 7中能用try來關閉資料庫資源,所用對象都繼承了AutoCloseable接口。

8、如果用的預編譯,則:PreparedStatement pstmt = conn.prepareStatement(String sql);

注意,在sql參數中,注意将不确定的值設為?。

9、建立了預編譯對象後,用setXxx配合exec等方法操作。

使用預編譯SQL語句有如下好處:

1、預編譯SQL,性能更好;

2、無需拼接SQL語句,程式設計簡單;

3、防止SQL注入,安全性更好。

是以,通常更推薦用預編譯方法。

補充:管理結果集——可滾動/可更新

可以在聲明PreparedStatement對象時傳入可滾動和可更新參數(略),這樣就可以用UpdateXxx修改記錄指針所指記錄、特定列的值,最後調用UpdateRow()方法送出修改。

補充:事務支援

由Connection提供,預設是自動送出,即關閉事務。若要開啟事務支援,在生成Connection對象和Statement對象之間,加上:conn.setAutoCommit(false)關閉自動送出,開啟事務支援。

執行完多條sql後,再來一句:conn.commit()送出事務即可。

補充:資料庫連接配接池的概念

在應用中,資料庫連接配接經常開啟和關閉,這是非常耗費系統資源的,對系統性能有很大影響。于是提出連接配接池的解決方案:每次請求資料庫連接配接時無需重新打開連接配接,而是從連接配接池中取出已有的連接配接使用,用完後不再關閉資料庫連接配接,而是直接将連接配接歸還給連接配接池。通過連接配接池的統一管理,大大提高系統運作效率。常用參數:

資料庫初始連接配接數;

連接配接池最大連接配接數;

連接配接池最小連接配接數;

連接配接池每次增加的容量等等……

實際使用中,連接配接池是一種工具類,常用的開源資料源(DataSource,即連接配接池)有DBCP和C3P0。