JDBC編程小結
(1) JDBC API調用流程:
1. 加載驅動
String driveName = "com.mysql.jdbc.Driver"; // mysql
Class.forName(driveName);
2. 利用 DriverManager 獲取 Connection對象(數據庫連接對象,代表一個物理連接)
Connection conn = DriverManager.getConnection(url, user, pass);
3. 獲取數據庫連接
生成Statement / PrepareStatement / CallableStatement 對象
Statement st = conn.createStatement();
PrepareStatement pst = conn.prepareStatement(sql); // 將SQL語句進行預編譯,返回預編譯的Statement對象
sql = "insert into student_table value(4, ?)";
c cst = conn.prepareCall(sql); // 返回對象,用于調用存儲過程
sql = "{call add_pro(?, ?, ?)}";
注:該存儲過程創建如下
delimiter //
create procedure add_pro (a int, b int, out sum int)
begin
set sum = a+b;
end;
//
4. 執行SQL,結果集ResultSet
Statement
ResultSet rset = cst.executeUpdate(sql); DDL --> 0 | DML --> 返回受影響的行數
.execute(sql) bool ResultSet-->true 空/受影響行數 --> false
.executeQuery(sql) ResultSet
PrepareStatement
pst.setInt(1, 3);// 向第一個?中 賦值3
pst.executeUpdate();
CallableStatement
cst.setInt(1, 4);
cst.setInt(2, 5);
cst.registerOutParameter(3, Type.INTERGER);// 注冊CallableStatement的第三個參數為int類型
cst.execute();
(2). 連接池進行數據庫操作
目
標:上述方式 通過DriverManager創建數據庫連接完成 操作,一次數據庫連接對應一個物理連接,頻繁的建立與關閉 造成性能下降。 連接池
建立多個連接,起始處于空閑,來請求時進行響應,在完成對 一個連接請求的響應后 不關閉物理連接,使其空閑,從而實現對物理連接的復用。
JDBC數據庫連接池由 javax.sql.DataSource來表示,其中DataSource為接口,由廠商實現。
常見數據庫連接池:
1. Druid
2. C3P0
3. DBCP
4. JNDI
等
使用大致流程:
DBCP
創建數據源對象
BasicDateSource ds = new BasicDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/db_name");
ds.setUsername("root");
...
ds.setInitialSize(6);
....
利用 數據源獲取 數據庫連接
Connection conn = ds.getConnection() ; // 此后操作同上
....
釋放數據庫連接(將數據庫連接釋放,歸還連接池,物理連接并未關閉)
conn.close();
C3P0
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setDriverClass("com.mysql.jdbc.Driver");
ds.setJdbcUrl("jdbc:mysql://localhost:3306/db_name"); // 方法名與上述略微不同
...
利用 數據源獲取 數據庫連接
Connection conn = ds.getConnection() ; // 此后操作同上
....
釋放數據庫連接(將數據庫連接釋放,歸還連接池,物理連接并未關閉)
conn.close();
其中上述連接池中 Druid 為阿里巴巴開源項目,目前性能最好的。對比數據參考:
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!