黑马程序员技术交流社区

标题: jdbc的批量处理 [打印本页]

作者: 王超举    时间: 2017-9-10 20:00
标题: jdbc的批量处理
对于大批量插入数据库中数据,使用jdbc的批量处理使用简介先来个简单的,供大家好理解。

[Java] 纯文本查看 复制代码
        @Test
        //批量插入数据库
        public void Demo1() throws Exception{
                String sql1 = "insert into user values('1','a1')  ";
            String sql2 = "insert into user values('2','a2')  ";
            String sql3 = "insert into user values('3','a3')  ";
            String sql4 = "insert into user values('4','a4')  ";
            Connection conn = JDBCUtils.getConnection();
            PreparedStatement pstmt = conn.prepareStatement(sql1);
            pstmt.addBatch();
            pstmt.addBatch(sql2);
            pstmt.addBatch(sql3);
            pstmt.addBatch(sql4);
            pstmt.executeBatch();
        }

为了大家更好的理解上面的代码,附图一张,可以查看附件。
下面将重复代码放入循环中,以优化代码写法。
[Java] 纯文本查看 复制代码
@Test
        //批量插入数据库,循环方式
        public void Demo2() throws Exception{
                Connection conn = JDBCUtils.getConnection();
                PreparedStatement ps = null;
                int len = 8;
                for(int i=0; i<len; i++) {
                        String sql = "insert into user value("+i+",'aa')";
                        ps = conn.prepareStatement(sql);
                //优化插入  等一定量后再一起插入。
                ps.addBatch();
            }
         ps.executeBatch();  
         //优化插入提交,批量插入数据库中。
         ps.clearBatch();        //提交后,Batch清空。
        }

理解上面的代码后,我们来看如果插入1000条数据,可以每10条批量插入一次,并且sql语句也可以做设置参数的处理,代码如下
[Java] 纯文本查看 复制代码
@Test
        //批量添加,并设置参数
        public void Demo6() throws Exception{
                Connection conn = JDBCUtils.getConnection();
                String sql = "insert into user values(?,?)";
                PreparedStatement ps = conn.prepareStatement(sql);
                int len = 10;
                for(int i=0; i<1000; i++) {
                        ps.setInt(1, i);
                        ps.setString(2, "a"+i);
                        //优化插入        插入代码打包,等一定量后再一起插入。
                        ps.addBatch();
                        //每len = 10次提交一次
                        if((i!=0 && i%len==0) || i==len-1){//可以设置不同的大小;如50,100,200,500,1000等等  
                                ps.executeBatch();  
                                //优化插入第三步       提交,批量插入数据库中。
                                ps.clearBatch();        //提交后,Batch清空。
                        }
                }
               
        }


批量插入.png (101.69 KB, 下载次数: 10)

批量插入.png





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2