错误的方法如下:
Java代码
1. try{
2. conn.setAutoCommit(false);
3. pst = conn.prepareStatement(insertSql);
4. pstDel = conn.prepareStatement(delSql);
5. pstUpdate = conn.prepareStatement(sql);
6. ...
7. //totalSize = 100W数据 / 3000一批次
8. for (int i = 1; i <= totalSize; i++) {
9.
10. client.appendXML(list);
11.
12. }
13. // 错误的使用方法
14. client.finishXML();
15. pst.executeBatch();
16. pstDel.executeBatch();
17. }
18. ...
19. finally {
20. try {
21. if (isError) {
22. conn.rollback();
23. }
24. else
25. conn.commit();
26. ...
27. }
28. ...
29. }
正确的方法如下
try{
Java代码
1. conn.setAutoCommit(false);
2. pst = conn.prepareStatement(insertSql);
3. pstDel = conn.prepareStatement(delSql);
4. pstUpdate = conn.prepareStatement(sql);
5. ...
6. //totalSize = 100W数据 / 3000一批次
7. for (int i = 1; i <= totalSize; i++) {
8. list = 从数据库中查询3000条数据
9. client.appendXML(list);
10.
11. pst.executeBatch();
12. pstDel.executeBatch();
13. }
14. client.finishXML();
15.
16.
17. ...
18. inally {
19. try {
20. if (isError) {
21. conn.rollback();
22. }
23. else
24. conn.commit();
25. ...
26. }
27. ...
如果碰到和我一样的需要给大家一个提醒.
oracle在每次执行executeBatch();进行批处理的时候,当前connection对应的rownum会根据操作的结果发生变化.
在执行pst.executeBatch(); 之后,当前连接的 rownum 数就会发生变化. 因此凡是通过rownum查询数据的程序都要小心这一点
下一篇将整理写java大数据(千万级别以上的)处理,包括 ftp大数据处理、文件生成大数据处理、数据库转移大数据处理、文件读取大数据处理等等.
摘自 研发项目管理