JDBC入门(4)--- 批处理
1、Statement批處理
當你有10條SQL語句要執(zhí)行時,一次向服務(wù)器發(fā)送一條SQL語句,這樣做的效率上極差,處理的方案是使用批處理,即一次向服務(wù)發(fā)送多條SQL語句,然后由服務(wù)器一次性處理。
批處理只針對更新(增刪改)語句,批處理與查詢無關(guān)。
可以多次調(diào)用Statement類的addBatch(String sql)方法,把需要執(zhí)行的所有SQL語句添加到一個“批”中,然后調(diào)用Statement類的excuteBatch()方法來執(zhí)行當前“批中的語句”。
- void addBatch(String sql):添加一條語句到“批”中。
- int[] excuteBatch():執(zhí)行“批”中所有的語句,返回值表示每條語句所影響的行數(shù)據(jù);
- void clearBatch():清空“批”中的所有語句
2、PreparedStatement批處理
PreparedStatement的批處理有所不同,因為每個PreparedStatement對象都綁定一條SQL模板。所以向PreparedStatement中添加的不是SQL語句,而是給“?”賦值。
1 public class Demo5 {2 /*3 * pstmt對象內(nèi)部有集合4 * 1、用循環(huán)瘋狂向pstmt中添加sql參數(shù),它自己有模板,5 * 使用一組參數(shù)與模板就可以匹配一條sql語句6 * 2、調(diào)用它的執(zhí)行批方法,完成向數(shù)據(jù)庫發(fā)送。7 * */8 @Test9 public void fun1() throws Exception { 10 /* 11 * pstmt 12 * */ 13 Connection con = JdbcUtils.getConnection(); 14 String sql = "INSERT INTO t_user VALUES (?,?)"; 15 PreparedStatement pstmt = con.prepareStatement(sql); 16 for (int i = 0; i < 10000; i++) { 17 pstmt.setInt(1,i+1); 18 pstmt.setInt(2,i); 19 pstmt.addBatch();//添加批,這一組參數(shù)就保存到集合中; 20 } 21 long start = System.currentTimeMillis(); 22 pstmt.executeBatch();//執(zhí)行批處理; 23 long end = System.currentTimeMillis(); 24 System.out.println(end-start); 25 } 26 }打開批處理
MySQL的批處理也需要通過參數(shù)來打開:rewriteBatchedStatements=true,如
url = jdbc:mysql://localhost:3306/mydb1?rewriteBatchedStatements=true
效果:
- 批處理開啟前耗時:140794ms
- 批處理開啟后耗時:174ms
轉(zhuǎn)載于:https://www.cnblogs.com/gdwkong/p/7632905.html
總結(jié)
以上是生活随笔為你收集整理的JDBC入门(4)--- 批处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django内置的用户认证
- 下一篇: 素数判定算法 MILLER RABIN