Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQL异常:结果集关闭后不允许操作_Java_Mysql_Resultset - Fatal编程技术网

Java SQL异常:结果集关闭后不允许操作

Java SQL异常:结果集关闭后不允许操作,java,mysql,resultset,Java,Mysql,Resultset,我得到一个异常“ResultSet关闭后不允许操作”,函数每次都会关闭ResultSet。我应该在函数中添加“synchronized”吗?或者如何解决这个异常 public static ArrayList<Region> getHotProductRegionList() { ArrayList<Region> list = new ArrayList<Region>(); ResultS

我得到一个异常“ResultSet关闭后不允许操作”,函数每次都会关闭ResultSet。我应该在函数中添加“synchronized”吗?或者如何解决这个异常

        public static ArrayList<Region> getHotProductRegionList() {

            ArrayList<Region> list = new ArrayList<Region>();

            ResultSet rs = null;
            conn.checkConn();
            try {
                    if (getHotProductRegionStmt==null) getHotProductRegionStmt = conn.prepareStatement(getHotProductRegionStr);
                    rs = getHotProductRegionStmt.executeQuery();
                    if (rs!=null) {
                            while (rs.next()) {
                                    Region r = new Region();
                                    setRegion(r, rs);
                                    list.add(r);
                            }
                            rs.close();
                    }
            } catch (Exception e) {
                    J.m("RegionManager.getHotProductRegion Exception: " + e.getMessage());
                    e.printStackTrace();
            }
            if (rs!=null) try { rs.close(); } catch (Exception ex) {}
            return list;
    }
    private static PreparedStatement getHotProductRegionStmt = null;
    private static String getHotProductRegionStr = " SELECT * FROM Region";

您尝试关闭结果集两次。而是在finally块下关闭一次结果集

try{ }
catch(Exception e){}
finally{
     if(rs!=null)
           rs.close();
}

你的整个方法在这里是错误的。您应该在每次调用此方法时使用新的、本地的、
连接
PreparedStatement
,然后关闭它们,并使用连接池来减轻影响。使用静态
连接
不是线程安全的,而使用静态
PreparedStatement
根本不会起作用。

请将最后一个
if(rs!=null)
放在
finally
blockthx中,但在您的问题中,异常指向“while(rs.next())”堆栈跟踪。注意:静态
PreparedStatement
变量当然应该是一个局部变量,
Connection
变量也应该是一个局部变量。异常总是发生的?--如果连接已关闭,是否重新创建准备好的语句?Thx,@Jaime EJP,我更新了我的帖子,append PreparedStatement reset code private static void setRegion(区域c,结果集rs)抛出异常{c.setId(rs.getInt(“id”);c.setRegion(rs.getString(“区域”);c.setRegionTw(rs.getString(“regionTw”);},和
rs
不能为空,必须调用
ResultSet.next()
在对其执行任何其他操作之前,例如检索值。@mav3n thx,但不起作用。RegionManager.getHotProductRegion异常:在结果集开始之前java.sql.SQLException:在结果集开始之前
try{ }
catch(Exception e){}
finally{
     if(rs!=null)
           rs.close();
}