PreparedStatement 批量执行有遗漏么?

zy2419 2010-10-26 09:04:53
表里大概有12.W数据
每1W条取一次出来
"select * from (select t.* ,rownum  row_num  from PAY_PREPAYMENT_WT_SEND t where REMAIN_MONTH <> 0 order by id desc) a where a.row_num>"
+ start
+ " and a.row_num <= "
+ end;


再对这1W条数据进行处理
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
PreparedStatement pstmt = null;
try {
conn.setAutoCommit(false);

pstmt =
conn.prepareStatement(
"update PAY_PREPAYMENT_WT_SEND set REMAIN_MONTH = REMAIN_MONTH-1, LAST_UPDATE =?,COUNTNUM = COUNTNUM+1 WHERE id =?");
for (int i = 0; i < list.size(); i++) {
CTSHWTPayMentEntity pe = (CTSHWTPayMentEntity) list.get(i);
pstmt.setString(2, pe.getId());
pstmt.setTimestamp(
1,
Timestamp.valueOf(fmt.format(pe.getLast_update())));
pstmt.addBatch();

}
pstmt.executeBatch();
conn.commit();
} catch (SQLException e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally {
try {
if (null != pstmt)
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}


结果发现更新的数据少了几千条,不知道什么原因,没报任何错误。
麻烦达人们看下
...全文
90 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
iihero_ 2010-11-10
  • 打赏
  • 举报
回复
没有异常吗?
int[] executeBatch()
看看这个调用的返回值,
zy2419 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 inthirties 的回复:]
是rownum的问题吧,

检查你的逻辑,这里不是ps的问题。

btw

ps不是这样用的。这样就失去了ps的意义。
[/Quote]

什么意思?为什么失去ps的意义?
inthirties 2010-10-27
  • 打赏
  • 举报
回复
是rownum的问题吧,

检查你的逻辑,这里不是ps的问题。

btw

ps不是这样用的。这样就失去了ps的意义。
ngx20080110 2010-10-26
  • 打赏
  • 举报
回复
是不是少了最後的幾千條?

3,492

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧