数据库您现在的位置是:首页 > 博客日志 > 数据库

java.sql.SQLException: No operations allowed after statement closed.

<a href='mailto:'>微wx笑</a>的头像微wx笑 2022-10-17数据库 10 0关键字: java  mysql  

java.sql.SQLException: No operations allowed after statement closed.原因很简单:这里和数据库的连接Connection是一个Static的,程序共享这一个Connection。所以第一次对数

java.sql.SQLException: No operations allowed after statement closed.cWw无知


cWw无知

原因很简单:这里和数据库的连接Connection是一个Static的,程序共享这一个Connection。所以第一次对数据库操作没问题,当把Connection关闭后,第二次还想操作数据库时Connection肯定不存在了。cWw无知

http://zhangsha1251.blog.163.com/blog/static/62624053201182111921783/cWw无知

MyBatis连接MySQL出错:No operations allowed after connection closedcWw无知

myBatis连接MySQL报异常:No operations allowed after connection closed.Connection was icWw无知

MyBatis连接MySQL出错:No operations allowed after connection closedcWw无知

https://stackoverflow.com/questions/25883403/java-sql-sqlexception-no-operations-allowed-after-connection-closedcWw无知

Well I found, the default time for closing connection if it has been inactive too long is 28800 seconds(8 hrs) for MYSQL (& not 34,247,052 milliseconds).cWw无知

show global variables;cWw无知

In MYSQL, I reset that value to 172800 seconds(48 hrs as per my requirement) usingcWw无知

set global wait_timeout=172800;cWw无知

and it worked fine.cWw无知

Thanks a lot for the help!cWw无知

Mysql异常:MySQLNonTransientConnectionException: No operations allowed after statement closedcWw无知

 Mysql的数据库连接默认等待时限(wait_timeout)是8个小时,在该时限内如果没有使用该Connection(超过了这个时限),Connection就会被关闭。虽然该Connection已经被关闭,但Connection不为空。第一次调用时没有问题的,如果长时间没有使用该Connection,Connection会被Mysql关闭(但不为null)。此时调用该Connection时就会抛出异常com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: No operations allowed after connection closed.Connection was implicitly closed by the driver.cWw无知

  如果一个程序中使用一个共同的static的Connection时,这种问题就很容易出现。cWw无知

查看Mysql的默认wait_timeout值(以下是我的Mysql中的配置)cWw无知

show variables like '%timeout%';cWw无知

+----------------------------+-------+cWw无知

| Variable_name              | Value |cWw无知

+----------------------------+-------+cWw无知

| connect_timeout            | 10    |cWw无知

| delayed_insert_timeout     | 300   |cWw无知

| innodb_lock_wait_timeout   | 50    |cWw无知

| innodb_rollback_on_timeout | OFF   |cWw无知

| interactive_timeout        | 6000  |cWw无知

| net_read_timeout           | 30    |cWw无知

| net_write_timeout          | 60    |cWw无知

| slave_net_timeout          | 3600  |cWw无知

| table_lock_wait_timeout    | 50    |cWw无知

| wait_timeout               | 6000  |cWw无知

+----------------------------+-------+cWw无知

10 rows in set (0.00 sec)cWw无知

wait_timeout的值是6000秒。cWw无知

解决方法:cWw无知

1.修改Mysql的配置文件,添加一个属性,一旦Connection被自动关闭,便进行自动重连cWw无知

2.在程序中进行判断,如hemowolf的方式。cWw无知

3.使用更高级的数据库连接的jar,老的都会有这种问题。cWw无知

4.不直接使用jdbc,改用Spring中的jdbcTemplate。cWw无知


cWw无知

本文为转载文章,版权归原作者所有,不代表本站立场和观点。

很赞哦! () 有话说 ()