jdbc java数据库连接 10)批处理
批处理
很多时候,需要批量执行sql语句!
需求:批量保存信息!
设计:
AdminDao
Public void save(List<Admin list){ // 目前用这种方式
// 循环
// 保存 (批量保存)
}
Public void save(Admin admin ){
// 循环
// 保存
}
技术:
|-- Statement
批处理相关方法
- void addBatch(String sql) 添加批处理
- void clearBatch() 清空批处理
- int[] executeBatch() 执行批处理
实现:
- Admin.java 实体类封装数据
- AdminDao.java 封装所有的与数据库相关的操作
- App.java 测试
代码:
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 }
何事都只需坚持..
难?
维熟尔。
LZL的自学历程...只需坚持