mysql批量删除时出现java.sql.SQLException: Operation not allowed after ResultSet closed
mysql批量删除操作出现异常
·
使用java批量删除数据时,出现了java.sql.SQLException: Operation not allowed after ResultSet closed
异常,具体的异常信息如下:
代码信息如下:
/**
* 删除指定时间点之前的所有数据
* @param endTime 时间点
* @throws Exception
*/
public static void removeOldEma(String endTime) throws Exception{
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
Statement stmt = conn.createStatement();
// 因为使用数据库,对批量操作有事务的条数要求,因为需要先查询目标删除数量,再进行批量删除
String countSql = "SELECT COUNT(*) AS sumNumber FROM tableName WHERE AcquisitionTime < '" + endTime + "'";
String sql = "DELETE FROM tableName WHERE AcquisitionTime < '" + endTime + "' LIMIT 10000";
try {
ResultSet resultSet = stmt.executeQuery(countSql);
while (resultSet.next()) {
try {
int number = resultSet.getInt("sumNumber");
int count = number / 10000;
if (number < 10000 || 0 != count){
for (int i = 0 ;i <= count; i++){
stmt.executeUpdate(sql);
}
}
}catch (Exception e){
logger.error("未查询到数据: SQL:" + sql);
}
}
}catch (Exception e){
logger.error("Exception when removeOldEma: ", e);
}finally {
stmt.close();
conn.close();
}
}
跟踪代码发现,在最后一次数据删除后,resultSet被关闭,while循环体中判断resultSet时就会出现异常。于是将while循环的条件修改为 while (!resultSet.isClosed() && resultSet.next())
后问题解决。

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)