共计 1644 个字符,预计需要花费 5 分钟才能阅读完成。
本篇内容主要讲解“Mysql 异常 No operations allowed after statement closed 怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“Mysql 异常 No operations allowed after statement closed 怎么解决”吧!
之所以会出现这个异常,是因为 Mysql 在 5 以后针对超长时间 DB 连接做了一个处理,那就是如果一个 DB 连接在无任何操作情况下过了 8 个小时后,Mysql 会自动把这个连接关闭。所以使用连接池的时候虽然连接对象还在但是链接数据库的时候会一直报这个异常。解决方法很简单在 Mysql 的官方网站上就可以找到。有两个方法
### 第一种是在 DB 连接字符串后面加一个参数。
这样的话,如果当前链接因为超时断掉了,那么驱动程序会自动重新连接数据库。
jdbc:mysql://localhost:3306/makhtutat?autoReconnect=true
不过 Mysql 并不建议使用这个方法。因为第一个 DB 操作失败的后,第二 DB 成功前如果出现了重新连接的效果。
conn.createStatement().execute(
UPDATE checking_account SET balance = balance - 1000.00 WHERE customer= Smith
conn.createStatement().execute(
UPDATE savings_account SET balance = balance + 1000.00 WHERE customer= Smith
conn.commit();
当然如果出现了重新连接,一些用户变量和临时表的信息也会丢失。### 另一种方法是 Mysql 推荐的,需要程序员手动处理异常。
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
int retryCount = 5;
boolean transactionCompleted = false;
do {
try { conn = getConnection(); // assume getting this from a
// javax.sql.DataSource, or the
// java.sql.DriverManager
conn.setAutoCommit(false);
retryCount = 0;
stmt = conn.createStatement();
String query = SELECT foo FROM bar ORDER BY baz
rs = stmt.executeQuery(query);
while (rs.next()) { }
all.close()
transactionCompleted = true;
} catch (SQLException sqlEx) { String sqlState = sqlEx.getSQLState();
// 这个 08S01 就是这个异常的 sql 状态。单独处理手动重新链接就可以了。 if (08S01 .equals(sqlState) || 40001 .equals(sqlState))
{
retryCount--;
} else {
retryCount = 0;
}
} finally {
all close:
}
} while (!transactionCompleted (retryCount 0));}
}
到此,相信大家对“Mysql 异常 No operations allowed after statement closed 怎么解决”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!