Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用jdbc时何时关闭语句_Java_Jdbc_Memory Leaks - Fatal编程技术网

Java 使用jdbc时何时关闭语句

Java 使用jdbc时何时关闭语句,java,jdbc,memory-leaks,Java,Jdbc,Memory Leaks,我正在使用odbc连接Java中的mysql数据库 我编写了一个函数“ExecuteQuery”,它接受一个字符串参数作为sql语句并返回其结果集。但是,何时应该关闭语句对象? 如果我在函数ExecuteQuery中关闭它,那么返回的结果集也将关闭。 如果我不关闭它,内存泄漏就会发生,因为我在调用者中没有statement对象的引用。谢谢你你走错了路。如果您确实需要这样的函数(这是值得怀疑的),请让它接受一个语句作为参数,并创建一个单独的函数来创建和设置该语句。然后,您可以将函数和ResultS

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

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

你走错了路。如果您确实需要这样的函数(这是值得怀疑的),请让它接受一个
语句作为参数,并创建一个单独的函数来创建和设置该语句。然后,您可以将函数和
ResultSet
封装在
try..finally
中,然后在
finally
中阻塞并关闭语句

例如


然而,如果您面临这样的问题,您可能需要重新考虑您的体系结构。例如,请看一看。

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

例如


然而,如果您面临这样的问题,您可能需要重新考虑您的体系结构。例如,看看。

那么我应该使用什么方法?@Bear取决于您的情况。但是您在JDBC之上制作了一个毫无意义的包装器,这甚至不能使代码更干净。我建议您要么使用纯JDBC,要么切换到Hibernate(请参阅),那么我应该使用什么方法呢?@Bear取决于您的情况。但是您在JDBC之上制作了一个毫无意义的包装器,这甚至不能使代码更干净。我建议您要么使用纯JDBC,要么切换到Hibernate(请参阅)
Statement statement = getStatement();
try {
    ResultSet rs = executeQuery(statement, query);
    ...
} finally {
    statement.close();
}