用Java关闭数据库连接

时间:2011-10-24 15:06:35

标签: java sql jdbc connection

我的数据库类中有以下方法,它返回给定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菜鸟并且正在尝试,所以非常感谢任何帮助。

4 个答案:

答案 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块中的资源外,您还必须关闭PreparedStatementResultSet。实际上,您不应该返回ResultSet并将其保持打开状态太长时间。相反,您可以将其读入某种中间数据存储,例如List<Object[]>

另一方面,你没有得到java.lang.OutOfMemoryError,所以可能是你的数据库本身内存不足