现在我想同时往数据库同一个表插入多条记录,除了循环多次用insert语句插入,有没有更好(更优化)的方法呢?数据库插入

解决方案 »

  1.   

    拼接sql语句,进行批量插入,我目前知道mysql和oracle的,sqlserver的就不知道了。网上应该都有用法的,百度一下。
    比起反复插入的优势是,不用频繁的打开关闭数据库。
    不过如果你要插入的数据量不大的话,其实更改的必要性不大。
      

  2.   

    你用循环意思是一个SQL要去连接一次数据库,如果十个就循环十次,连十次数据库,这样是很废时间。你可以用批量插入,先把十条SQL用循环写入批量操作中,然后用JDBC批量执行就一次搞定。或则用上面2楼的方法写储存过程。
      

  3.   

    是用batch?
    jdbc记得支持batch方法
      

  4.   

    package day2;
    import java.sql.*;
    import day1.ConnectionUtils;
    /**
     * 测试JDBC中的批处理
     * @author 张三
     * @version 1.0
     */
    public class BatchDemo {  /**
       * @param args
       */
      public static void main(String[] args) {
        batch(100);
      }
      /**
       * 批量插入记录到temp_ning表中
       * @param count 要插入的记录总数
       */
      public static void batch(int count){
        String sql = "insert into temp_ning values(?)";
        
        Connection conn = null;
        PreparedStatement stmt = null;
        try{
          //coding here
          conn = ConnectionUtils.getConnection();
          conn.setAutoCommit(false);//设置为非自动提交
          
          stmt = conn.prepareStatement(sql);
          for(int i = 107; i <= 156; i++){
            stmt.setInt(1, i);
            stmt.addBatch();//加入到批处理集合
            if (i % 10 == 0){
              stmt.executeBatch();
              stmt.clearBatch();
            }
          }
          stmt.executeBatch();//执行批处理集合中的语句
           
          conn.commit();//提交
        }catch(Exception e){
          e.printStackTrace();
        }finally{
          ConnectionUtils.close(stmt);
          ConnectionUtils.close(conn);
        }
        
      }
      
      
      }
      

  5.   

    你用循环意思是一个SQL要去连接一次数据库,如果十个就循环十次,连十次数据库,这样是很废时间。你可以用批量插入,先把十条SQL用循环写入批量操作中,然后用JDBC批量执行就一次搞定。或则用上面2楼的方法写储存过程。恩恩...其实数据量不算很大,只是在做东西刚好碰到这情况,想多了解有没有其他的方法,批量跟存储过程没咋接触过,应该不会很麻烦吧?
      

  6.   


    好人,代码都贴出来了,但能解释下这个for循环么,为什么能被10整除就执行呢?
      

  7.   

    现在我想同时往数据库同一个表插入多条记录,除了循环多次用insert语句插入。
    如果数据量不大的话,其实没有优化的必要,
    循环中去访问DB会有一个问题,那就是循环的开启数据库,这样很耗用数据库的资源,如果是高并发的话,数据库很容易宕掉。
    package com.test;import java.sql.Connection;
    import java.sql.PreparedStatement;public class Test {
    public static void insertBatch() {
    int count[];
    int count1[];
    Boolean isinsert = false;
    Connection con = null;
    PreparedStatement pst = null;
    PreparedStatement pst1 = null;
    try {
    con.setAutoCommit(false); // 需要用到事务,不能让他自动提交,需要手动提交
    pst = con.prepareStatement("table"); // INSERT_SQL表示对一张表的插入记录 pst.setString(1, "name1");
    pst.setInt(2, 26);
    pst.setString(3, "job1");
    pst.addBatch(); pst.setString(1, "name2");
    pst.setInt(2, 12);
    pst.setString(3, "job2");
    pst.addBatch(); count = pst.executeBatch();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
    可以看下pst.addBatch();这行代码的用法。应该是你想要的。
    另外如果考虑性能的话,最快就是将这种操作交给存储过程来实现。
      

  8.   


    好人,代码都贴出来了,但能解释下这个for循环么,为什么能被10整除就执行呢?
    这个意思是循环100条insert语句,但每过10条,就执行下executeBatch,批量执行sql插入,防止万一100条中有一条失败。则可能100条全部无法插入。10条一次执行,断点保护机制
      

  9.   

    你需求插入的数据从哪里来?如果需要插入的数据多个字段相同,而不同的字段是从数据库获取的,就可以直接一条语句完成插入String sql = "insert into xx(userid,conid,state,custname) select userid,'"+String.valueOf(meetingId)+"',3,custname from yy where id in();
      

  10.   


    好人,代码都贴出来了,但能解释下这个for循环么,为什么能被10整除就执行呢?
    这个意思是循环100条insert语句,但每过10条,就执行下executeBatch,批量执行sql插入,防止万一100条中有一条失败。则可能100条全部无法插入。10条一次执行,断点保护机制恩恩,貌似懂了