在java中使用select命令运行SQLexecuteQuery函数时,即使它是一个选择查询,我仍然得到SQLException说
ResultSet is from UPDATE. No Data.
此问题仅在高负载时发生。否则查询效果很好。
我使用的是mysql连接器8.0.16
只有重新启动服务器才有帮助,但也需要在代码中处理此问题以确保安全。
这是示例函数
public CacheKey getResult(String type, String colId) {
ResultSet resultSet = null;
PreparedStatement statement = null;
try {
String request = "select * from Table where a = ?";
//mCxnContainer is connection which is declared at class level
statement = mCxnContainer.getStatement(request);
if (statement == null) {
mCxnContainer = getNewConnection();
statement = mCxnContainer.getStatement(request);
}
statement.setString(1, colId);
resultSet = statement.executeQuery();
returnEntry = cacheEntry.toEntry(resultSet);
} catch (SQLException e) {
e.printStacktrace();
} finally {
try {
if (resultSet != null)
resultSet.close();
if (statement != null)
statement.close();
} catch (SQLException e) {
e.printStacktrace();
}
}
return returnEntry;
}
问题是由于连接造成的。 一旦我们开始关闭连接并在需要时从池中获取新连接,问题就解决了。