好吧,在过去的两天里一直在试图解决这个问题。
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>>);
}
这已经晚了几年,但我发现同步数据库方法通常可以解决这个问题。