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。