JDBC實現批處理有兩種方式:statement和preparedstatement
先比較一下兩種方式的批處理:
1.採用Statement.addBatch(sql)方式實現批處理的優缺點
採用Statement.addBatch(sql)方式實現批處理:
優點:可以向數據庫發送多條不同的SQL語句。
缺點:SQL語句沒有預編譯。
當向數據庫發送多條語句相同,但僅參數不同的SQL語句時,需重複寫上很多條SQL語句。
2.採用PreparedStatement.addBatch()方式實現批處理的優缺點
採用PreparedStatement.addBatch()實現批處理
優點:發送的是預編譯後的SQL語句,執行效率高。
缺點:只能應用在SQL語句相同,但參數不同的批處理中。因此此種形式的批處理經常用於在同一個表中批量插入數據,或批量更新表的數據。
下面具體介紹一下:
一.使用Statement完成批處理
1.使用Statement對象添加要批量執行SQL語句,如下:
Statement.addBatch(sql1);
Statement.addBatch(sql2);
Statement.addBatch(sql3);
2、執行批處理SQL語句:Statement.executeBatch();
3、清除批處理命令:Statement.clearBatch();
1.1 使用Statement完成批處理範例
public void testJdbcBatchHandleByStatement(){
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try{
conn = JdbcUtils.getConnection();
st = conn.createStatement();
//添加要批量執行的SQL
st.addBatch(sql1);
st.addBatch(sql2);
st.addBatch(sql3);
st.addBatch(sql4);
st.addBatch(sql5);
st.addBatch(sql6);
st.addBatch(sql7);
//執行批處理SQL語句
st.executeBatch();
}catch (Exception e) {
conn.rollback();
e.printStackTrace();
}finally{
//清除批處理命令
st.clearBatch();
JdbcUtils.release(conn, st, rs);
}
}
二、使用PreparedStatement完成批處理
1.PerparedStatement在conn.prepareStatement(sql); 的時候需要將sql直接傳入。
2.添加批處理: pst.addBatch();
2.1 使用PreparedStatement完成批處理範例
public void testJdbcBatchHandleByPrepareStatement(){
long starttime = System.currentTimeMillis();
Connection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
try{
conn = JdbcUtils.getConnection();
String sql = "insert into testbatch(id,name) values(?,?)";
pst = conn.prepareStatement(sql);
for(int i=1;i<1000008;i++){ //i=1000 2000
pst.setInt(1, i);
pst.setString(2, "aa" + i);
pst.addBatch();
if(i%1000==0){
pst.executeBatch();
pst.clearBatch();
}
}
pst.executeBatch();
}catch (Exception e) {
e.printStackTrace();
}finally{
JdbcUtils.release(conn, pst, rs);
}