Java JDBC MySQL 异常:“结果集关闭后不允许操作”
尝试对关闭的结果集进行操作时通常会发生此错误。让我们分析提供的代码来确定异常的原因。
数据库初始化
MySQLDatabase 类在 connect() 方法中建立与数据库的连接。语句变量是用connection.createStatement()初始化的。但是,此语句在所有数据库操作中共享,包括选择和更新查询。
捐赠处理
MySQLDonation 类循环遍历“捐赠”表并处理捐赠记录。 while循环迭代从query("SELECT * FROM gieli436_purchases.donations")语句获得的ResultSet。
异常原因
发生错误的原因是使用了语句检索 ResultSet 还用于执行删除查询,这会关闭之前的 ResultSet。因此,对关闭的 ResultSet 的后续 next() 调用会抛出“ResultSet 关闭后不允许操作”异常。
解决方案
要解决此问题,请创建每个查询执行一个新的语句。修改MySQLDatabase类,删除statement = connection.createStatement();来自连接()。将类中的所有statement实例替换为connection.createStatement()。
更正
// MySQLDatabase class // Remove statement = connection.createStatement(); // Replace statement with connection.createStatement() // MySQLDonation class // Remove private variable statement // Query execution results = connection.createStatement().executeQuery("SELECT * FROM gieli436_purchases.donations"); // Delete execution connection.createStatement().executeUpdate(String.format("DELETE FROM gieli436_purchases.donations WHERE donations.username='%s' LIMIT 1", client.playerName.replaceAll(" ", "_")));
通过为每个查询创建单独的Statement,您可以确保ResultSet处理期间保持打开状态,防止异常。
以上是为什么我的 Java JDBC MySQL 代码抛出'结果集关闭后不允许操作”?的详细内容。更多信息请关注PHP中文网其他相关文章!