使用jdbc时何时关闭Statement

发布于 2024-12-05 05:04:51 字数 190 浏览 1 评论 0原文

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

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

I am using odbc to connect mysql database in Java

I write a function "ExecuteQuery", it takes a string parameter as sql statement and returns its resultset. However, when should I close the statement object?
If I close it in function ExecuteQuery, the returned resultset will be closed as well.
If I don't close it, memory leak occurs as I do not have the reference of statement object in caller. Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

哭了丶谁疼 2024-12-12 05:04:51

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

例如

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

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

You're taking wrong approach. If you really need such function (which is doubtful), make it accept a Statement as a parameter and make a separate function to create and set up that statement. Then you may wrap your function and ResultSet work in a try..finally block and close the statement in finally.

E.g.

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

However, if you're facing such problems, you may want to re-consider your architecture. Take a look at Hibernate, for example.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文