数据库Connection.close()异常解决

当数据库wait_timeout时间设置时间小于数据联接时间时,报如下错误xiao’ycom.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:Connection.close() has already been called. Invalid operation in this state.

解决方法:
1.更改数据库wait_timeout时间延长———不建议
2.每次数据联接都新建一个连接,使用完成时关闭所有数据源联接----建议。

报错信息在这里插入图片描述

比如请求数据正常的流程应该是:

1.新建一个数据库联接
2.打开联接
3.执行查询语句
4.关闭联接
5.释放数据库联接

这样就可以避免长时间保持联接而被迫中断了。

这个异常通常表示在调用 `con.close()` 时,`con` 对象为 `null`。这种情况通常有以下几种可能性: 1. 在获取连接时出现异常,导致 `conn` 为 `null`。在使用连接时,应该先判断连接是否为 `null`,避免出现空指针异常。 2. 在使用连接后,没有及时关闭连接,导致连接被其他线程关闭,此时再次关闭连接时,会出现空指针异常。在使用连接后,应该及时关闭,避免出现这种情况。 3. 程序中出现并发问题,导致多个线程同时使用同一个连接,其中一个线程关闭了连接,另一个线程再次关闭连接时,会出现空指针异常。应该在程序中避免这种并发问题。 针对以上情况,可以采取以下措施: 1. 在获取连接时,应该先判断连接是否为 `null`,避免出现空指针异常。 ```java // 获取数据库连接 Connection conn = ds.getConnection(); if (conn != null) { try { // 执行数据库操作 // ... } finally { // 将连接放回连接池 conn.close(); } } ``` 2. 在使用连接后,应该及时关闭连接,释放资源,避免出现连接被其他线程关闭的情况。 ```java // 获取数据库连接 Connection conn = ds.getConnection(); try { // 执行数据库操作 // ... } finally { if (conn != null) { try { conn.close(); } catch (SQLException e) { // 异常处理 } } } ``` 3. 在程序中避免并发问题,可以采用线程安全的方式访问数据库连接。可以使用连接池提供的线程池来管理连接,每个线程从线程池中获取连接,使用完毕后将连接放回线程池中。这样可以避免并发问题,提高程序的性能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值