實現批處理addBatch,executeBatch

l業務場景:當需要向數據庫發送一批SQL語句執行時,應避免向數據庫一條條的發送執行,而應採用JDBC的批處理機制,以提升執行效率。
l實現批處理有兩種方式,第一種方式:
Statement.addBatch(sql)
l執行批處理SQL語句
executeBatch()方法:執行批處理命令
clearBatch()方法:清除批處理命令



Connection conn = null;

Statement st = null;

ResultSet rs = null;

try {

conn = JdbcUtil.getConnection();

String sql1 = "insert into user(name,password,email,birthday)

  values('kkk','123','[email protected]','1978-08-08')";

String sql2 = "update user set password='123456' where id=3";

st = conn.createStatement();

st.addBatch(sql1);  //SQL語句加入到批命令中

st.addBatch(sql2);  //SQL語句加入到批命令中

st.executeBatch();

finally{

  JdbcUtil.free(connstrs);

}



l採用Statement.addBatch(sql)方式實現批處理:
優點:可以向數據庫發送多條不同的SQL語句。
缺點:
SQL語句沒有預編譯。
•當向數據庫發送多條語句相同,但僅參數不同的SQL語句時,需重複寫上很多條SQL語句。例如:

  Insert into user(name,password) values(‘aa’,’111’);

  Insert into user(name,password) values(‘bb’,’222’);

  Insert into user(name,password) values(‘cc’,’333’);

  Insert into user(name,password) values(‘dd’,’444’);



l實現批處理的第二種方式:
PreparedStatement.addBatch()

conn = JdbcUtil.getConnection();

String sql = "insert into user(name,password,email,birthday) values(?,?,?,?)";

st = conn.prepareStatement(sql);

for(int i=0;i<50000;i++){

st.setString(1, "aaa" + i);

st.setString(2, "123" + i);

st.setString(3, "aaa" + i + "@sina.com");

st.setDate(4,new Date(1980, 10, 10));

st.addBatch();

if(i%1000==0){

st.executeBatch();

st.clearBatch();

}

}

st.executeBatch();

l採用PreparedStatement.addBatch()實現批處理
優點:發送的是預編譯後的SQL語句,執行效率高。
缺點:只能應用在SQL語句相同,但參數不同的批處理中。因此此種形式的批處理經常用於在同一個表中批量插入數據,或批量更新表的數據。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章