• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    jdbc使用PreparedStatement批量插入数据的方法

    批量插入

    1. 批量执行SQL语句

    当需要成批插入或者更新记录时,可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单独提交处理更有效率

    JDBC的批量处理语句包括下面三个方法:

    通常我们会遇到两种批量执行SQL语句的情况:

    2. 高效的批量插入

    举例:向数据表中插入20000条数据

    数据库中提供一个goods表。创建如下:

    CREATE TABLE goods(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(20)
    );

    实现层次一:使用Statement

    Connection conn = JDBCUtils.getConnection();
    Statement st = conn.createStatement();
    for(int i = 1;i = 20000;i++){
     String sql = "insert into goods(name) values('name_' + "+ i +")";
     st.executeUpdate(sql);
    }

    实现层次二:使用PreparedStatement

    long start = System.currentTimeMillis();
      
    Connection conn = JDBCUtils.getConnection();
      
    String sql = "insert into goods(name)values(?)";
    PreparedStatement ps = conn.prepareStatement(sql);
    for(int i = 1;i = 20000;i++){
     ps.setString(1, "name_" + i);
     ps.executeUpdate();
    }
      
    long end = System.currentTimeMillis();
    System.out.println("花费的时间为:" + (end - start));//82340
    JDBCUtils.closeResource(conn, ps);

    实现层次三

    /*
     * 修改1: 使用 addBatch() / executeBatch() / clearBatch()
     * 修改2:mysql服务器默认是关闭批处理的,我们需要通过一个参数,让mysql开启批处理的支持。
     *    ?rewriteBatchedStatements=true 写在配置文件的url后面
     * 修改3:使用更新的mysql 驱动:mysql-connector-java-5.1.37-bin.jar
     * 
     */
    @Test
    public void testInsert1() throws Exception{
     long start = System.currentTimeMillis();
      
     Connection conn = JDBCUtils.getConnection();
      
     String sql = "insert into goods(name)values(?)";
     PreparedStatement ps = conn.prepareStatement(sql);
      
     for(int i = 1;i = 1000000;i++){
      ps.setString(1, "name_" + i);
       
      //1.“攒”sql
      ps.addBatch();
      if(i % 500 == 0){
       //2.执行
       ps.executeBatch();
       //3.清空
       ps.clearBatch();
      }
     }
      
     long end = System.currentTimeMillis();
     System.out.println("花费的时间为:" + (end - start));//20000条:625                                                                         //1000000条:14733  
      
     JDBCUtils.closeResource(conn, ps);
    }

    实现层次四

    /*
    * 层次四:在层次三的基础上操作
    * 使用Connection 的 setAutoCommit(false)  /  commit()
    */
    @Test
    public void testInsert2() throws Exception{
     long start = System.currentTimeMillis();
      
     Connection conn = JDBCUtils.getConnection();
      
     //1.设置为不自动提交数据
     conn.setAutoCommit(false);
      
     String sql = "insert into goods(name)values(?)";
     PreparedStatement ps = conn.prepareStatement(sql);
      
     for(int i = 1;i = 1000000;i++){
      ps.setString(1, "name_" + i);
       
      //1.“攒”sql
      ps.addBatch();
       
      if(i % 500 == 0){
       //2.执行
       ps.executeBatch();
       //3.清空
       ps.clearBatch();
      }
     }
      
     //2.提交数据
     conn.commit();
      
     long end = System.currentTimeMillis();
     System.out.println("花费的时间为:" + (end - start));//1000000条:4978 
      
     JDBCUtils.closeResource(conn, ps);
    }

    到此这篇关于jdbc使用PreparedStatement批量插入数据的文章就介绍到这了,更多相关jdbc使用PreparedStatement批量插入数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • Java编程中使用JDBC API连接数据库和创建程序的方法
    • JDBC编程实现文件、图片的存储方法
    • JDBC 使用说明(流程、架构、编程)
    • Java Spring5学习之JdbcTemplate详解
    • Spring JDBC的使用详解
    • 将原生JDBC封装实现CRUD的案例
    • JavaWeb实战之用Servlet+JDBC实现用户登录与注册
    • SpringBoot多数据源配置详细教程(JdbcTemplate、mybatis)
    • Java构建JDBC应用程序的实例操作
    • JDBC编程的详细步骤
    上一篇:SQL Server2019数据库之简单子查询的具有方法
    下一篇:仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    jdbc使用PreparedStatement批量插入数据的方法 jdbc,使用,PreparedStatement,