我想插入100W条数据,但是插入的数据这么都是30W条多点,不知为什么???,下面是代码,long total = total + 1000000000l; //total=100W
String sql = "insert into student values(?,?,?,?,?)";Connection conn = DButils.getConnection();
PreparedStatement st = null;
int t = 1;conn.setAutoCommit(false);
st = conn.prepareStatement(sql);
for(long i=1000000001; i<= total; i++){  
   st.setLong(1, i);
   st.setString(2, i+"");
   st.setInt(3, 20);
   st.setInt(4, i%2==0?0:1);
   st.setDate(5, new Date(86,8,6));
   st.addBatch();
   if(t++%100000 == 0) { st.executeBatch(); t=1; }
}
st.executeBatch();
conn.commit();

解决方案 »

  1.   

    不知道你定义那个long total干什么用 就程序而言没看出什么问题
      

  2.   

    不知道你要t干什么~完全不必要这样~~再说插入100W条数据而且提交方式改为手动!你知道你的IDE吃得消啊!!!
      

  3.   


    没必要纠结这些,这只是我摘过来的一部分,total本来是个函数参数,表示要插入多少条数据,total = total + 1000000000l 表示1000000000是id字段的前缀,是种格式方面的要求.
      

  4.   

    我以前用过preparedstatement进行过批处理,好像问什么问题,你换preparedstatement式一下
      

  5.   


    long total = total + 1000000000l; //total=100Wfor(long i=1000000001; i<= total; i++){  
    难道这个程序能插入数据?
      

  6.   

    我知道我的代码复制过来,删掉一些后,看上去会有些问题,比如:long total = total + 1000000000l; //total=100W但是请不要纠结这些细节性的东西,这种细节在真正写程序的时候注意下就可以了,贴到这里的代码是原系统copy过来肯定是可以运行的,去掉一些东西后的可能会出现一些编译时错误但是不影响问题的描述的。
      

  7.   

    for(long i=1000000001; i<= total; i++){  
       st.setLong(1, i);
       st.setString(2, i+"");
       st.setInt(3, 20);
       st.setInt(4, i%2==0?0:1);
       st.setDate(5, new Date(86,8,6));
       st.addBatch();
       if(t++%100000 == 0) { st.executeBatch(); t=1; }
    } t=1又从来了?
      

  8.   


      if(t++%100000 == 0) { 
    st.executeBatch(); 
    st.clearBatch();//这个忘记加了吧t=1; }
      

  9.   

    (1)long total = total + 1000000000l; //total=100W
    1000000000l最后是一个小写L吧?
    (2)for(long i=1000000001; i<= total; i++){  
    1000000001最后是一个数字1吧?
      

  10.   

    lz一次提交100w条数据,可能connection最大提交数不允许这么多,建议lz每10w时,提交一次事务
      

  11.   

    发现问题了,一次性提交10W条太多了。下面一句话网上抄的:在用jdbc的(executeBatch)批量处理时一定注意最大上限,否则只会执行一部分sql语句,超过上限的sql会自动丢弃。