结果集关闭后不允许执行操作



好吧,在过去的两天里一直在试图解决这个问题。

Statement statement = con.createStatement();
                        String query = "SELECT * FROM sell";
                        ResultSet rs = query(query);
                        while (rs.next()){//<--- I get there operation error here

这是查询方法。

    public static ResultSet query(String s) throws SQLException {
        try {
            if (s.toLowerCase().startsWith("select")) {
                if(stm == null) {
                    createConnection();
                }
                ResultSet rs = stm.executeQuery(s);
                return rs;
            } else {
                if(stm == null) {
                    createConnection();
                }
                stm.executeUpdate(s);
            }
            return null;
        } catch (Exception e) {
            e.printStackTrace();
            con = null;
            stm = null;
        }
        return null;
    }

如何修复此错误?

仅从您发布的代码中很难确定,但我怀疑ResultSet无意中在while循环的主体内被关闭(或stm被重用)。这将在下一个迭代开始时触发异常。

此外,您需要确保应用程序中没有其他线程可能使用相同的数据库连接或stm对象。

我直言,在关闭连接之前,您应该对 ResultSet 执行所需的一切操作。

您需要

修复的事情很少。打开连接、运行查询以获取 rs、关闭它和关闭连接都应尽可能在同一函数范围内完成。从您的代码来看,您似乎将"con"变量用作全局变量,这可能会导致问题。您没有关闭 STM 对象。或 RS 对象。此代码不会运行太长时间,即使它没有错误也是如此。你的代码应该是这样的:

if (stringUtils.isBlank(sql)){
     throw new IllegalArgumentsException ("SQL statement is required");
}
Connection con = null;
PreparedStatement ps =null;
Resultset rs = null;
try{
         con = getConnection();
         ps = con.preparestatement(sql);
         rs = ps.executeQuery();
         processResults(rs);
         close(rs);
         close(ps);
         close(con);
}catch (Execption e){
        log.Exception ("Error in: {}", sql, e);
        throw new RuntimeException (e);
}finally{
        close(rs);
        close(ps);
        close(con);
}

内部循环中使用另一个语句对象喜欢

Statement st,st1;
st=con.createStatement();
st1=con.createStatement();
//in Inner loop
while(<<your code>>)
{
   st1.executeQuery(<<your query>>);
}
我知道

这已经晚了几年,但我发现同步数据库方法通常可以解决这个问题。

相关内容

  • 没有找到相关文章

最新更新