举例:
不到100条直接执行,
1-100条没有错误成功导入,
101-200中第189条出错则这100-200条记录回滚
201-300继续执行没有错误,直接导入
301-320没有错误直接导入
谁给个大体的思路,谢谢了。

解决方案 »

  1.   

    思路:
    自己手动开启session, 写满100条的时候,刷新缓存区,提交事务。
    如果出错,把异常抛出来, service事务配置中有抛异常时回滚的配置。
      

  2.   


    try{
    for(int i = 0;i<count;i++){
    xxx.insert();
    if(i%100==0 || i==count){
    tx.commit;
    }
    }
    }catch(Exception e){
    tx.rollback();
    }
      

  3.   

    上面有个判断写错了。应该是i-count==1,不是i==count。我自己随便乱写的,不知道对不对
      

  4.   

    for example
    Connection conn;
    conn.setAutoCommit(false);
    PreparedStatement pstmt = conn.prepareStatement("insert into sometable values (?,?...)");
    int count = 0;
    while (count<your_count) {
        pstmt.setXX(1, xx);
        pstmt.setYY(2, yy);
        ...
        try {
            pstmt.executeUpdate();
            i++;
            if (i%100 == 0) {
                conn.commit();
            }
        } catch (Exception e) {
            conn.rollback();
            //如果要整百条移动的话,修改count,即 count = (count/100 + 1) * 100 + 1;
        }
    }
    if (count%100 != 0) {
        try {
            conn.commit();
        } catch (Exception e) {
            conn.rollback();
        }
    }
      

  5.   

    批量更新就是,100条commit一次,如果异常了,就rollback然后continue循环
      

  6.   

    代码写不出来。
    思路也就是 进行数据推送 + 队列 + Batch每100条数据做 队列中的一队,以 prepareStatement + Batch方式。
    进行数据推送,其中有一个插入不成功,则该队回滚。4楼部分代码可以做参考