不少時候,須要批量執行sql語句!java
需求:批量保存信息! sql
設計:數據庫
AdminDao測試
Public void save(List<Admin list){ // 目前用這種方式spa
// 循環設計
// 保存 (批量保存)code
}blog
Public void save(Admin admin ){get
// 循環io
// 保存
}
技術:
|-- Statement
批處理相關方法
實現:
代碼:
1:實體類封裝數據
1 public class Admin { 2 3 private String userName; 4 private String pwd; 5 }
2:測試批處理操做
1 public class App { 2 // 測試批處理操做 3 @Test 4 public void testBatch() throws Exception { 5 6 // 模擬數據 7 List<Admin> list = new ArrayList<Admin>(); 8 for (int i=1; i<21; i++) { 9 Admin admin = new Admin(); 10 admin.setUserName("Jack" + i); 11 admin.setPwd("888" + i); 12 list.add(admin); 13 } 14 15 // 保存 16 AdminDao dao = new AdminDao(); 17 dao.save(list); 18 } 19 }
3:封裝全部的與數據庫的操做
1 public class AdminDao { 2 3 // 全局參數 4 private Connection con; 5 private PreparedStatement pstmt; 6 private ResultSet rs; 7 8 // 批量保存管理員 9 public void save(List<Admin> list) { 10 // SQL 11 String sql = "INSERT INTO admin(userName,pwd) values(?,?)"; 12 13 try { 14 15 // 獲取鏈接 16 con = JdbcUtil.getConnection(); 17 // 建立stmt 18 pstmt = con.prepareStatement(sql); // 【預編譯SQL語句】 19 20 for (int i=0; i<list.size(); i++) { 21 Admin admin = list.get(i); 22 // 設置參數 23 pstmt.setString(1, admin.getUserName()); 24 pstmt.setString(2, admin.getPwd()); 25 26 // 添加批處理 27 pstmt.addBatch(); // 【不須要傳入SQL】 28 29 // 測試:每5條執行一次批處理 30 if (i % 5 == 0) { 31 // 批量執行 32 pstmt.executeBatch(); 33 // 清空批處理 34 pstmt.clearBatch(); 35 } 36 37 } 38 39 // 批量執行 40 pstmt.executeBatch(); 41 // 清空批處理 42 pstmt.clearBatch(); 43 44 } catch (Exception e) { 45 e.printStackTrace(); 46 } finally { 47 JdbcUtil.closeAll(con, pstmt, rs); 48 } 49 } 50 }