需要向資料庫發送多條sql語句時, 為了提升執行效率, 可以考慮採用JDBC的批處理機制.
JDBC的批處理機制主要涉及Statement或PreparedStatement對象的以下方法:
|--addBatch(String sql) :Statement類的方法, 多次調用該方法可以將多條sql語句添加到Statement對象的命令列表中.
執行批處理時將一次性的把這些sql語句發送給資料庫進行處理.
|--addBatch(): PreparedStatement類的方法, 多次調用該方法可以將多條先行編譯的sql語句添加到PreparedStatement對象的命令列表中.
執行批處理時將一次性的把這些sql語句發送給資料庫進行處理.
|--executeBatch():把Statement對象或PreparedStatement對象命令列表中的所有sql語句發送給資料庫進行處理.
|--clearBatch(): 清空當前sql命令列表.
[java] view plaincopy /* * create table batch_test(id int primary key auto_increment, name varchar(40), age int); */ public class BatchTest { @Test public void statementBatch() { Connection conn = null; Statement st = null; String sql_1 = "insert into batch_test(name, age) values('coolxing', 24)"; String sql_2 = "insert into batch_test(name, age) values('coolmin', 22)"; String sql_3 = "insert into batch_test(name, age) values('yong', 21)"; String sql_4 = "update batch_test set name='java' where id=1"; try { conn = JdbcUtils.getConnection(); st = conn.createStatement(); st.addBatch(sql_1); st.addBatch(sql_2); st.addBatch(sql_3); st.addBatch(sql_4); st.executeBatch(); st.clearBatch(); } catch (SQLException e) { e.printStackTrace(); } finally { JdbcUtils.release(null, st, conn); } } @Test public void preparedStatementBatch() { Connection conn = null; PreparedStatement st = null; String sql = "insert into batch_test(name, age) values(?, ?)"; try { conn = JdbcUtils.getConnection(); [java] view plaincopy //通過只開啟一個串連 st = conn.prepareStatement(sql); for (int i = 0; i < 10002; i++) { st.setString(1, "coolxing_" + i); st.setInt(2, i); st.addBatch(); // 需要防止Preparedstatement對象中的命令列表包含過多的待處理sql語句, 而造成outOfMemory錯誤