栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mysql批量删除时出现java.sql.SQLException: Operation not allowed after ResultSet closed

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mysql批量删除时出现java.sql.SQLException: Operation not allowed after ResultSet closed

使用java批量删除数据时,出现了java.sql.SQLException: Operation not allowed after ResultSet closed异常,具体的异常信息如下:

代码信息如下:

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())后问题解决。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1024755.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号