zoukankan      html  css  js  c++  java
  • mysql批量新增和批量删除

    首先推荐使用PreparedStatement的批量处理操作。 

       Connection conn = null;
       PreparedStatement stmt = null;
       try{
          Class.forName("com.mysql.jdbc.Driver");
          conn = DriverManager.getConnection(DB_URL,USER,PASS);
    
          String SQL = "INSERT INTO Employees(id,first,last,age) " +
                       "VALUES(?, ?, ?, ?)";
    
          stmt = conn.prepareStatement(SQL);
    
          conn.setAutoCommit(false);
        //数据量多的 可以使用for循环批量
          stmt.setInt( 1, 400 );
          stmt.setString( 2, "Python" );
          stmt.setString( 3, "Zhang" );
          stmt.setInt( 4, 33 );
          stmt.addBatch();
    
          stmt.setInt( 1, 401 );
          stmt.setString( 2, "C++" );
          stmt.setString( 3, "Huang" );
          stmt.setInt( 4, 31 );
          stmt.addBatch();
          int[] count = stmt.executeBatch();
     }catch(Exception e){
          e.printStackTrace();
       }finally{
          try{
             if(stmt!=null)
                stmt.close();
          }catch(SQLException se2){
          }
          try{
             if(conn!=null)
                conn.close();
          }catch(SQLException se){
             se.printStackTrace();
          }
       }
    或类似于
    1. PreparedStatement ps = conn.prepareStatement(  
    2.    "INSERT into employees values (?, ?, ?)");  
    3.   
    4. for (n = 0; n < 100; n++) {  
    5.   
    6.   ps.setString(name[n]);  
    7.   ps.setLong(id[n]);  
    8.   ps.setInt(salary[n]);  
    9.   ps.addBatch();  
    10. }  

    删除的,类似。

    其次,使用下面的方式:

    1.批量新增

    int count = list.size() / 500; //自己定义一次批量处理条数(不要太高,我这边遇到批量超过20000条,速度明显变慢,批量15w等的急死,如果太大的话,还有可能超过mysql默认的最大长度1M的限制)
    int remainder = list.size() % 500;
    List<Map<String, String>> oneSubmit = null;
    for(int i = 0; i<= count; i++) {
      if(i == count) {
        if(remainder > 0) {
        oneSubmit = list.subList(500*i, 500*i+remainder);
        ceShiDao.batchInsertZztContactTmp(oneSubmit);
        }
      }else {
        oneSubmit = list.subList(500*i, 500*(i+1));
        ceShiDao.batchInsert(oneSubmit);
      }
    }
    
    @Insert({"<script>",
    "insert into xxx (file_name, file_id, user_id, phone,create_user_id,update_user_id,status,params) values ",
    "<foreach collection='list' item='item' separator=','>",
    " (#{item.fileName},",
    " #{item.fileId},",
    " #{item.userId},",
    " #{item.phone},",
    " #{item.createUserId},",
    " #{item.updateUserId},",
    " #{item.status},",
    " #{item.params})",
    "</foreach>",
    "</script>"})
    int batchInsert(@Param("list") List<Map<String, String>> list);

    2.批量删除

    int count = contactIdList.size() / 500;
    int remainder = contactIdList.size() % 500;
    List<Integer> oneSubmit = null;
    for(int i = 0; i<= count; i++) {
      if(i == count) {
        if(remainder > 0) {
          oneSubmit = contactIdList.subList(500*i, 500*i+remainder);
          ceShiDao.batchDelete(oneSubmit);
        }
      }else {
        oneSubmit = contactIdList.subList(500*i, 500*(i+1));
        ceShiDao.batchDelete(oneSubmit);
      }
    }
    
    @Delete({"<script>",
    "delete from xxx",
    "where tmp_contact_id in ",
    " <foreach collection='list' item='item' open='(' separator=',' close=')'>",
    " #{item}",
    " </foreach>",
    "</script>"
    })
    int batchDelete(@Param("list") List<Integer>list);
  • 相关阅读:
    对返回的json数据重写格式,用特性JsonConverter
    dev 的NavBarControl动态菜单
    获取oracel数据库的结构
    Java-背单词程序(俄语)
    实现同或操作 C++
    输入字符串先用cin后用getline函数失效原因
    C++全局变量与局部变量
    4.Redis事务
    3.持久化配置
    2.常用数据类型
  • 原文地址:https://www.cnblogs.com/muxi0407/p/11947412.html
Copyright © 2011-2022 走看看