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

一、 本次问题

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

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

报错代码:

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博客

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值