多线程使用同一个connection数据库连接的问题
因为业务上的原因,决定在多线程中使用同一个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();
}
}
已经开启了事务,在全部的代码都执行完之后才会最终手工提交。
求问上面抛出的异常是什么原因,这个问题都快烦扰我两天了。
...全文
相关推荐
数据库连接池dbcp
数据库连接池是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。在整合开发框架时会用得到
解析为何要关闭数据库连接,可不可以不关闭的问题详解
本篇文章是对为何要关闭数据库连接,可不可以不关闭的问题进行了详细的分析介绍,需要的朋友参考下
易语言-多线程同时查询同一数据库对比
多线程演示和单线程分别演示查询同一数据库对比
Java数据库连接池的原理与应用.zip
Java数据库连接池的原理与应用
django-db-connection-pool:Django 的持久数据库连接后端
django-db-connection-pool Django 的 MySQL & Oracle & PostgreSQL 连接池后端,基于 SQLAlchemy。 快速开始 使用pip安装所有引擎: $ pip install django-db-connection-pool[all] 或选择特定引擎: $ pip install django-db-connection-pool[mysql,oracle,postgresql] 配置 MySQL 将django.db.backends.mysql更改为dj_db_conn_pool.backends.mysql : DATABASES = { 'default': { ... 'ENGINE': 'dj_db_conn_pool.backends.mysql'



