举例:
不到100条直接执行,
1-100条没有错误成功导入,
101-200中第189条出错则这100-200条记录回滚
201-300继续执行没有错误,直接导入
301-320没有错误直接导入
谁给个大体的思路,谢谢了。
不到100条直接执行,
1-100条没有错误成功导入,
101-200中第189条出错则这100-200条记录回滚
201-300继续执行没有错误,直接导入
301-320没有错误直接导入
谁给个大体的思路,谢谢了。
解决方案 »
- 警告:[unchecked] 对作为普通类型 java.util.ArrayList 的成员的 add(E) 的调用未经检查
- 缓存问题
- 大家都来说说java面试都有那些个方面,进来补全,好让新人早日工作啊!
- 关于sakai 平台
- MyEclipse7,编写spring配置文件时,总提示一个对话框,求助
- Freemarker读取session 及判断语句的问题
- 极度郁闷。。,昨天买个jsp空间,空间商让我把lib下jar包放在classes目录下,我该怎么配置啊?
- webservice 类型转换
- 我知道如果我再问ejb意义何在,肯定有人会丢我鸡蛋,但是我真的很不明白
- name is too long to represent
- SSH框架中实现级联查询出错 报附表的session木有开启
- debug on server/run on server
自己手动开启session, 写满100条的时候,刷新缓存区,提交事务。
如果出错,把异常抛出来, service事务配置中有抛异常时回滚的配置。
try{
for(int i = 0;i<count;i++){
xxx.insert();
if(i%100==0 || i==count){
tx.commit;
}
}
}catch(Exception e){
tx.rollback();
}
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();
}
}
思路也就是 进行数据推送 + 队列 + Batch每100条数据做 队列中的一队,以 prepareStatement + Batch方式。
进行数据推送,其中有一个插入不成功,则该队回滚。4楼部分代码可以做参考