何时使用jdbc时关闭Statement

时间:2011-09-17 04:04:06

标签: java jdbc memory-leaks

我使用odbc连接Java中的mysql数据库

我编写了一个函数“ExecuteQuery”,它将一个字符串参数作为sql语句并返回其结果集。但是,什么时候应该关闭语句对象? 如果我在函数Exec​​uteQuery中关闭它,返回的结果集也将被关闭。 如果我不关闭它,发生内存泄漏,因为我没有调用者中的语句对象的引用。谢谢

1 个答案:

答案 0 :(得分:3)

你采取了错误的做法。如果你确实需要这样的函数(这是值得怀疑的),那么让它接受一个Statement作为参数,并创建一个单独的函数来创建和设置该语句。然后,您可以将您的函数和ResultSet工作在try..finally块中,然后关闭finally中的语句。

E.g。

Statement statement = getStatement();
try {
    ResultSet rs = executeQuery(statement, query);
    ...
} finally {
    statement.close();
}

但是,如果您遇到此类问题,可能需要重新考虑您的架构。例如,请查看Hibernate