jsp使用JDBC在MySQL数据库中快速批量插入数据(几万行数据)

jsp使用JDBC在MySQL数据库中快速批量插入数据(几万行数据)

jsp使用JDBC在MySQL数据库中快速批量插入数据(几万行数据)

最近有个简单的作业,就是一个从数据库中取出数据来进行判断,然后输出到jsp页面。 当我用Statement来进行插入的时候,效率很慢。简直不能忍。

以下贴出简单的java中插入数据库的Statement代码

代码块

int sum[]=new int[hang1];
       for(int i = 0 ; i < hang1 ; i++){//循环读取数据库中每一行
           for(int j = 1 ; j<10 ;j+=2){//循环读取读取每一行中的每个value列
               if(data[i][j].equals("")){//判断当前value是否为空
                   continue;
                   }
                   for(int k =0;k<hang;k++){
                       if(data[i][j].equals(data2[k][0])){
                           sum[i]+=Integer.parseInt((String) data[i][j+1])*Integer.parseInt((String) data2[k][1]);
                           String sqlcunru = "insert into records (uid,ke,url) values ('"+data[i][0]+"','"+sum[i]+"','"+data[i][11]+"')";


                           stmt.execute(sqlcunru);//得到结果集
                           conn.commit();
                       }else{
                           continue;
                       } 
                   }
               }
           }

       String sqls = "select * from crawler.records";//查询语句
       ResultSet rsz = stmt.executeQuery(sqls);//得到结果集
       int shang = rsz.getRow();
       System.out.println(shang);

           if(shang==0){
               //System.out.println(data[0][0]);
               String sqlcunrus = "insert into records (uid,ke,url) values ('查询出错','0','未匹配到关键字,请重新输入!!!')";
               stmt.execute(sqlcunrus);//得到结果集
               conn.commit();
               stmt.close();
               conn.close();
               return;
           }

里面或许有错误,先不管了。。。
程序是按照用户输入的字,然后用fnlp分词后查询数据库的内容。
以下是查询的时间
就两个词语,管理中心

<br>与数据库中的大数据进行比较耗时 : 89.444 秒 
<br>完成总时间耗时 : 90.492 秒 

这怎么能忍呢,就百度PreparedStatement 处理会不会比Statement快,没想到快很多。
以下是修改后PreparedStatement 的代码。

String sqlcunru = "insert into records (uid,ke,url) values (?,?,?)";
       PreparedStatement psts = conn.prepareStatement(sqlcunru);  
       int sum[]=new int[hang1];
       for(int i = 0 ; i < hang1 ; i++){//循环读取数据库中每一行
           for(int j = 1 ; j<10 ;j+=2){//循环读取读取每一行中的每个value列
               if(data[i][j].equals("")){//判断当前value是否为空
                   continue;
                   }
                   for(int k =0;k<hang;k++){
                       if(data[i][j].equals(data2[k][0])){
                           sum[i]+=Integer.parseInt((String) data[i][j+1])*Integer.parseInt((String) data2[k][1]);

                           psts.setString(1,(String) data[i][0]);
                           psts.setInt(2, sum[i]);
                           psts.setString(3, (String) data[i][11]);
                           psts.addBatch(); 
                       }else{
                           continue;
                       } 
                   }
               }
           }
       psts.executeBatch(); // 执行批量处理  
       conn.commit();  // 提交  


       String sqls = "select * from crawler.records";//查询语句
       ResultSet rsz = stmt.executeQuery(sqls);//得到结果集
       int shang = rsz.getRow();
       System.out.println(shang);

           if(shang==0){
               //System.out.println(data[0][0]);
               String sqlcunrus = "insert into records (uid,ke,url) values ('查询出错','0','未匹配到关键字,请重新输入!!!')";
               stmt.execute(sqlcunrus);//得到结果集
               conn.commit();
               stmt.close();
               conn.close();
               return;
           }

也是查询了两个词语。管理中心

<br>与数据库中的大数据进行比较耗时 : 25.571 秒 

<br>完成总时间耗时 : 26.305 秒 

咦。。看起来快了许多。但是心里还是感觉慢。那就继续百度呗。。
发现了这样一段代码。。

url+="?useServerPrepStmts=false&rewriteBatchedStatements=true";

加到数据库连接后面。继续来测试。。竟然又快了快一倍。

<br>与数据库中的大数据进行比较耗时 : 14.593 秒 

<br>完成总时间耗时 : 15.291 秒 

以上的 useServerPrepStmts 和 rewriteBatchedStatements 在百度上可以搜索到原因是为什么。这里篇幅已经很长,就不在赘述了。

代码应该是可以看懂。不懂可以留言问我。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值