好吧,在过去的两天里,他一直试图解决这个问题。
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;
}
如何解决此错误?
答案 0 :(得分:5)
很难确定您发布的代码,但我怀疑ResultSet
无意中被关闭(或stm
正在被重复使用) while
循环。这将在下一次迭代开始时触发异常。
此外,您需要确保应用程序中没有其他线程可能使用相同的数据库连接或stm
对象。
答案 1 :(得分:3)
恕我直言,在关闭连接之前,您应该使用ResultSet完成所需的一切。
答案 2 :(得分:2)
您需要解决的问题很少。打开连接,运行查询以获取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);
}
答案 3 :(得分:2)
在内部循环中使用另一个Statement对象 像
Statement st,st1;
st=con.createStatement();
st1=con.createStatement();
//in Inner loop
while(<<your code>>)
{
st1.executeQuery(<<your query>>);
}
答案 4 :(得分:1)
我知道这已经晚了几年,但我发现同步db方法通常会解决这个问题。