我的数据库类中有以下方法,它返回给定SQL语句的结果集:
public static ResultSet sqlStatement(String query) throws SQLException{
ResultSet result = null;
Connection conn = connect();
Statement newStatement = conn.createStatement();
result = newStatement.executeQuery(query);
conn.close();
return result;
}
我想在返回结果集之前关闭与数据库的连接,但是它会抛出以下异常:
java.sql.SQLException: out of memory
我是一名java菜鸟并且正在尝试,所以非常感谢任何帮助。
答案 0 :(得分:1)
将conn.close()
放在finally
块中,以便在抛出异常时执行事件。
答案 1 :(得分:1)
根据我过去的经验(没有文档或任何内容),我会理解“ResultSet”就像C中的指针一样。我打赌它会在你执行查询时缓存数据库中的一些行。
因此,如果你关闭连接然后尝试使用结果集,那么所有那些缓存的结果集都没有正确的信息并获得下一个缓存等。结果,它会抛出内存异常..
无论如何在java中使用它们的正确方法..
Connection con...
try{
create connection
execute query
use your resultset completely..
}catch(...){
}finally{
close connection;
}
希望它会有所帮助
答案 2 :(得分:0)
始终,始终,始终关闭finally块中的数据库资源!
我怀疑你的逻辑会按原样运作。只有在连接打开时,ResultSet才可用。您需要在关闭连接之前处理整个ResultSet 。
答案 3 :(得分:0)
除了关闭finally块中的资源外,您还必须关闭PreparedStatement
和ResultSet
。实际上,您不应该返回ResultSet
并将其保持打开状态太长时间。相反,您可以将其读入某种中间数据存储,例如List<Object[]>
。
另一方面,你没有得到java.lang.OutOfMemoryError
,所以可能是你的数据库本身内存不足