我得到一个异常“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";
PreparedStatement重置代码:
private static DBConn conn = new DBConn("RegionManager") {
public void resetAll() {
getHotProductRegionStmt = reset(getHotProductRegionStmt);
}
};
答案 0 :(得分:0)
你的整个方法在这里是错误的。您应该在每次调用此方法时使用新的本地Connection
和PreparedStatement
,然后关闭它们,并使用连接池来减轻影响。使用静态Connection
不是线程安全的,使用静态PreparedStatement
根本不会起作用。
答案 1 :(得分:-1)
您正尝试关闭两次结果集。而是在finally块下关闭结果集。
try{ }
catch(Exception e){}
finally{
if(rs!=null)
rs.close();
}