ResultSet 关闭后不允许操作,mysql
Operation not allowed after ResultSet closed, mysql
每当我尝试 运行 这段代码时,我都会得到:"java.sql.SQLException: Operation not allowed after ResultSet closed"。它可以在不关闭连接的情况下工作,但我很好奇为什么会出现此错误以及关闭连接的正确方法是什么,这是代码:
public ResultSet UpdateTable(){
Connection con = connect();
ResultSet resultset;
Statement s = null;
resultset = null;
try{
s = con.createStatement();
resultset = s.executeQuery("select * from customera");
return resultset;
}
catch(SQLException e){
System.out.println(e.getMessage());
//con.close();
}
finally{
try{
s.close();
resultset.close();
con.close();
}
catch(SQLException e){
System.out.println(e.getMessage());
}
}
return null;
}
}
您宁愿检查它们是否有任何引用,然后关闭它们。
finally {
if (resultset != null) {
resultset.close();
}
if (s != null) {
s.close();
}
if (con != null) {
con.close();
}
}
我怀疑
有问题
return resultset;
因为您要在 return 加入 ResultSet
之前关闭 Connection
和 Statement
,所以 ResultSet
可能不可用。您必须知道 finally
块将在 return 值之前执行。这也是为什么当您打开 Connection
时您的代码仍在运行。
因此,您应该将结果存储到某种数据结构中,然后 return。
您的错误很可能不是来自您显示的代码。相反,它是由其他代码生成的,因为您在其他代码使用它之前关闭了 ResultSet
和 Statement
。 (根据文档,关闭 Statement
也会关闭其 ResultSet
。)
您可以在此方法中调用完成使用 ResultSet
所需的任何代码,或者您可以只 return ResultSet
并让调用代码负责关闭它。你的决定可能取决于你的其他代码,但我更愿意让它成为调用代码的责任(因为它专门从这个方法中得到一个 ResultSet
,它应该知道它必须关闭它。)
附带说明一下,您应该更好地区分异常消息,这样您就可以知道它们来自哪里。
每当我尝试 运行 这段代码时,我都会得到:"java.sql.SQLException: Operation not allowed after ResultSet closed"。它可以在不关闭连接的情况下工作,但我很好奇为什么会出现此错误以及关闭连接的正确方法是什么,这是代码:
public ResultSet UpdateTable(){
Connection con = connect();
ResultSet resultset;
Statement s = null;
resultset = null;
try{
s = con.createStatement();
resultset = s.executeQuery("select * from customera");
return resultset;
}
catch(SQLException e){
System.out.println(e.getMessage());
//con.close();
}
finally{
try{
s.close();
resultset.close();
con.close();
}
catch(SQLException e){
System.out.println(e.getMessage());
}
}
return null;
}
}
您宁愿检查它们是否有任何引用,然后关闭它们。
finally {
if (resultset != null) {
resultset.close();
}
if (s != null) {
s.close();
}
if (con != null) {
con.close();
}
}
我怀疑
有问题return resultset;
因为您要在 return 加入 ResultSet
之前关闭 Connection
和 Statement
,所以 ResultSet
可能不可用。您必须知道 finally
块将在 return 值之前执行。这也是为什么当您打开 Connection
时您的代码仍在运行。
因此,您应该将结果存储到某种数据结构中,然后 return。
您的错误很可能不是来自您显示的代码。相反,它是由其他代码生成的,因为您在其他代码使用它之前关闭了 ResultSet
和 Statement
。 (根据文档,关闭 Statement
也会关闭其 ResultSet
。)
您可以在此方法中调用完成使用 ResultSet
所需的任何代码,或者您可以只 return ResultSet
并让调用代码负责关闭它。你的决定可能取决于你的其他代码,但我更愿意让它成为调用代码的责任(因为它专门从这个方法中得到一个 ResultSet
,它应该知道它必须关闭它。)
附带说明一下,您应该更好地区分异常消息,这样您就可以知道它们来自哪里。