当前位置: 代码迷 >> Oracle技术 >> PreparedStatement 批量执行有遗漏么?解决方法
  详细解决方案

PreparedStatement 批量执行有遗漏么?解决方法

热度:1306   发布时间:2016-04-24 08:43:42.0
PreparedStatement 批量执行有遗漏么?
表里大概有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()
看看这个调用的返回值,
  相关解决方案