表里大概有12.W数据
每1W条取一次出来
- Java code
"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条数据进行处理
- Java code
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(); } }
结果发现更新的数据少了几千条,不知道什么原因,没报任何错误。
麻烦达人们看下
------解决方案--------------------
是rownum的问题吧,
检查你的逻辑,这里不是ps的问题。
btw
ps不是这样用的。这样就失去了ps的意义。
------解决方案--------------------
没有异常吗?
int[] executeBatch()
看看这个调用的返回值,