java - 已达到 MaxOpenPreparedStatements 限制

标签 java oracle jdbc apache-commons-dbcp

仅在应用程序运行几天后,我的代码中的某些数据库更新才会出现此异常。有些请求通过了,有些(相同的java代码)失败了。

java.sql.SQLException: MaxOpenPreparedStatements limit reached
       at org.apache.commons.dbcp.PoolingConnection.prepareStatement(PoolingConnection.java:109)
       at org.apache.commons.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java:281)
       at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.prepareStatement(PoolingDataSource.java:313)
       at com.prog.C.f(C.java:967)
       at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
       at java.lang.Thread.run(Thread.java:619)
Caused by: java.util.NoSuchElementException
       at org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:808)
       at org.apache.commons.dbcp.PoolingConnection.prepareStatement(PoolingConnection.java:107)
       ... 15 more

数据源配置:

<bean id="DataSource" class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close" lazy-init="true" scope="singleton">
        <property name="driverClassName" value="${jdbc.driver.class}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="poolPreparedStatements" value="true"/>
        <property name="maxOpenPreparedStatements" value="20"/>
    </bean>

始终有可用的连接。我该如何修复它?谢谢。

最佳答案

这意味着您可能没有正确关闭资源。您应该在创建它们的方法范围内的finally block 中执行此操作。

关于java - 已达到 MaxOpenPreparedStatements 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3416276/

相关文章:

java将数字值加密为字母数字值

java - PDFTextStripper 解析编码错误

linux - RMAN 命令未在 .sh 文件中执行

oracle - 从范围分区和压缩表中删除列

sql - SQL-触发 “not in”

java - 如何使用 Java 从 blob 中插入和检索 pdf

java - ArrayIndexOutOfBoundException - hsqldb?

java - Avro 使用 json 转换生成类问题 [kotlin]

java - 与用户相关的线程的响应能力

java - JDBC SQL 服务器 : The value is not set for the parameter number