標籤:
http://mousepc.iteye.com/blog/1131462
•業務情境:當需要向資料庫發送一批SQL語句執行時,應避免向資料庫一條條的發送執行,而應採用JDBC的批處理機制,以提升執行效率。
一、
•實現批處理有兩種方式,第一種方式:
•Statement.addBatch(sql)
•執行批處理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(conn, st, rs);
}
•採用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’);
二、•實現批處理的第二種方式:•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();
•採用PreparedStatement.addBatch()實現批處理•優點:發送的是先行編譯後的SQL語句,執行效率高。•缺點:只能應用在SQL語句相同,但參數不同的批處理中。因此此種形式的批處理經常用於在同一個表中批量插入資料,或批次更新表的資料。
[轉]使用JDBC進行批處理