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