jdbc java数据库连接 10)批处理

批处理

  很多时候,需要批量执行sql语句!

  需求:批量保存信息!  

  设计

    AdminDao

    Public  void  save(List<Admin list){    // 目前用这种方式

      // 循环

      // 保存  (批量保存)

      }

 

    Public  void  save(Admin  admin ){

      // 循环

      // 保存

      }

  技术

    |-- Statement

      批处理相关方法

    1. void addBatch(String sql)     添加批处理
    2. void clearBatch()            清空批处理
    3. int[] executeBatch()         执行批处理

 

 

 

  实现

  1. Admin.java         实体类封装数据
  2. AdminDao.java      封装所有的与数据库相关的操作
  3. 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 }

 

posted @ 2016-11-01 22:03  卡拉瓦  阅读(510)  评论(0编辑  收藏  举报