java.sql.SQLException: org.apache.tomcat.dbcp.dbcp.DelegatingStatement……解决方法

java.sql.SQLException: org.apache.tomcat.dbcp.dbcp.DelegatingStatement with address: "com.mysql.jdbc.StatementImpl@187955b" is closed.

at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.checkOpen(DelegatingStatement.java:137)

at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228)

at com.goodsshop.db.DB.insertMeg(DB.java:84)

at com.goodsshop.servlet.RegisterLogin.doRegister(RegisterLogin.java:116)

at com.goodsshop.servlet.RegisterLogin.doPost(RegisterLogin.java:37)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)

at java.lang.Thread.run(Thread.java:619)

 

 

 

分析问题:

这个错误也没有什么的,看到我注明的红色Word了吗?意思就是你调用了一个业务逻辑方法后关闭了Statement,而在同一个对象同要调用了另一个业务逻辑方法,这时的Statement已经被关闭释放了,所以就出现了前面的异常啦!!!!!!!!!!


### 数据库连接异常分析 `org.springframework.jdbc.CannotGetJdbcConnectionException` 是 Spring 应用程序中常见的 JDBC 连接失败异常。该错误通常表明应用程序无法成功获取到数据库连接池中的 JDBC 连接资源。 #### 可能的原因 1. **驱动类未加载**:如果 `oracle.jdbc.OracleDriver` 驱动未能正确加载,则可能导致此问题。 2. **配置文件参数错误**:如数据源的 URL、用户名或密码不匹配目标 Oracle 数据库实例[^1]。 3. **网络连通性问题**:客户端与服务器之间的网络通信中断可能阻止建立连接。 4. **连接池耗尽**:当应用尝试使用的并发连接数超过最大允许值时,也可能抛出此类异常。 5. **版本兼容性问题**:旧版 `ojdbc*.jar` 文件可能与当前运行的应用服务器存在冲突[^2]。 ### 解决方案 以下是针对上述原因的具体解决方案: #### 一、确认并更新驱动程序 确保项目依赖项中包含了最新版本的 Oracle 官方 JDBC 驱动 (`ojdbc8.jar`) 并替换掉任何过期或者损坏的老版本 JAR 包: ```xml <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>19.8.0.0</version> </dependency> ``` #### 二、验证配置属性准确性 检查 XML 或 properties/yml 中的数据源设置是否无误。例如,在基于 XML 的 Spring 配置里应有如下形式的内容: ```xml <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="oracle.jdbc.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@//hostname:port/service_name"/> <property name="username" value="your_username"/> <property name="password" value="your_password"/> </bean> ``` 注意这里的 `${}` 占位符需通过外部环境变量或其他方式解析成实际值。 #### 三、测试网络可达性和端口开放状态 利用命令行工具 ping 和 telnet 来初步判断主机名及指定端口号的服务可用状况。对于更复杂的场景可以考虑采用专业的诊断软件进一步排查潜在障碍。 #### 四、调整连接池参数优化性能表现 适当增大初始大小(initialSize),最小空闲(minIdle)以及最大活跃(maxActive)等数值来缓解因频繁创建销毁带来的压力;同时启用预检机制(testOnBorrow=true, validationQuery=SELECT 1 FROM DUAL)定期清理失效链接从而减少不必要的重试次数。 #### 五、日志记录增强调试能力 增加详细的 SQL 执行跟踪信息以便于定位具体环节上的瓶颈所在位置。可以通过修改 logback.xml 或其他 logging framework 的 configuration files 实现这一目的。 ```java logging.level.org.springframework.jdbc.core.JdbcTemplate=DEBUG logging.level.com.zaxxer.hikari.HikariConfig=INFO ``` --- ### 示例代码片段展示如何自定义 DataSource Bean (Spring Boot) 在现代开发实践中推荐使用 Java Config 方式替代传统 XML 描述风格完成相同功能实现: ```java import org.apache.tomcat.dbcp.dbcp2.BasicDataSource; import javax.sql.DataSource; @Configuration public class DatabaseConfiguration { @Bean(name = "dataSource") public DataSource dataSource() { BasicDataSource basicDataSource = new BasicDataSource(); basicDataSource.setDriverClassName("oracle.jdbc.OracleDriver"); basicDataSource.setUrl("jdbc:oracle:thin:@//localhost:1521/orclpdb"); basicDataSource.setUsername("scott"); basicDataSource.setPassword("tiger"); // Additional configurations... basicDataSource.setInitialSize(5); basicDataSource.setMaxTotal(20); basicDataSource.setMinIdle(5); return basicDataSource; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值