一、 本次问题

报错如题,收集整理了常见的解决问题的办法,发现并不能解决我的问题。

发现另外一个可能导致报该错的原因,就是字段的字符集不对。虽然由于统一设置问题一般不会出现这种情况,但是如果疏忽还是会有,比如我...

报错代码:

WARN 5352 --- [io-8088-exec-10] c.atomikos.jdbc.AbstractConnectionProxy  : Error closing pending statement: 

java.sql.SQLException: No operations allowed after statement closed.
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:127)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:87)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:61)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:71)

本次出现的原因是,当搜索条件包含中文字符时,若字段不是utf8或utf8mb4类型的字符集,也会出现该报错,一时疏忽字符集设置不正确,导致出现该问题。

二、其他常见的解决办法

 进入MySQL查看设置的时间,show global variables like 'wait_timeout';

1、增加MySQL的 wait_timeout 的时间

windows环境下,修改mysql5的配置文件“my.ini”(mysql5 installation dir),增加一行:wait_timeout=1814400  (修改时间为21天),在Linux下叫my.cnf,该文件位于/etc/my.cnf

或者,登录MySQL,使用SQL语句修改,set global wait_timeout=1000000;

2、在DB连接字符串后面加一个参数。当前链接因为超时断掉了,那么驱动程序会自动重新连接数据库jdbc:mysql://localhost:3306/makhtutat?autoReconnect=true。

不过Mysql并不建议使用这个方法。因为第一个DB操作失败的后,第二DB成功前如果出现了重新连接的效果。这个失败操作将不会处于一个事务以内,第二DB操作如果成功的话,这个事务将被提交

重新连接后一些用户变量和临时表的信息也会丢失,不推荐。

3、手动处理异常。

4、不直接使用jdbc,改用Spring中的jdbcTemplate。

5、druid连接池版本使用1.0.29或更高。

参考:No operations allowed after statement closed_弧光_MAS的博客-CSDN博客

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐