双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

多线程使用同一个connection数据库连接的问题

CocoPig CocoPig 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
因为业务上的原因,决定在多线程中使用同一个connection,先是在主线程做了insert操作,然后从同一张表中分段取list给多个子线程执行遍历处理,在子线程执行过程中又操作更新数据表。
子线程分别跑了几十次的遍历后陆续抛出如下异常:

[pool-1-thread-1] [PreparedStatementPool.java:166] ERROR - exitImplicitCacheToClose error
java.sql.SQLRecoverableException: Closed Statement
at oracle.jdbc.driver.OracleClosedStatement.exitImplicitCacheToClose(OracleClosedStatement.java:4686) ~[ojdbc6-11.2.0.1.0.jar:11.2.0.1.0]
at oracle.jdbc.driver.OraclePreparedStatementWrapper.exitImplicitCacheToClose(OraclePreparedStatementWrapper.java:1621) ~[ojdbc6-11.2.0.1.0.jar:11.2.0.1.0]
at com.alibaba.druid.util.OracleUtils.exitImplicitCacheToClose(OracleUtils.java:72) ~[druid-1.0.15.jar:1.0.15]
at com.alibaba.druid.pool.PreparedStatementPool.closeRemovedStatement(PreparedStatementPool.java:164) [druid-1.0.15.jar:1.0.15]
at com.alibaba.druid.pool.PreparedStatementPool$LRUCache.removeEldestEntry(PreparedStatementPool.java:192) [druid-1.0.15.jar:1.0.15]
at java.util.LinkedHashMap.addEntry(LinkedHashMap.java:431) [na:1.7.0_79]
at java.util.HashMap.put(HashMap.java:505) [na:1.7.0_79]
at com.alibaba.druid.pool.PreparedStatementPool.put(PreparedStatementPool.java:91) [druid-1.0.15.jar:1.0.15]
at com.alibaba.druid.pool.DruidPooledConnection.closePoolableStatement(DruidPooledConnection.java:163) [druid-1.0.15.jar:1.0.15]
at com.alibaba.druid.pool.DruidPooledPreparedStatement.close(DruidPooledPreparedStatement.java:201) [druid-1.0.15.jar:1.0.15]

子线程操作表的某个方法如下:

private void updateKJMJE(Connection con,String contract_no,BigDecimal kjmje) throws SQLException{
String sql = " update tbl_pb_casemain set DEDUCTIBLE_AMOUNT=? where pk_bill=?";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setBigDecimal(1, kjmje);
pstmt.setString(2, contract_no);
pstmt.execute();
if(pstmt!=null&&!pstmt.isClosed()){
pstmt.close();
}
}

已经开启了事务,在全部的代码都执行完之后才会最终手工提交。
求问上面抛出的异常是什么原因,这个问题都快烦扰我两天了。
...全文

相关推荐

评论 1
收藏 已收藏
分享
返回顶部
CocoPig
Java EE 67,535 成员 225,843 内容