Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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 对非resultset结果查询重用语句_Java_Database - Fatal编程技术网

Java 对非resultset结果查询重用语句

Java 对非resultset结果查询重用语句,java,database,Java,Database,虽然已经讨论过很多次,但是要在尽可能短的范围内关闭数据库资源。我想知道是否可以重用不返回任何结果集的语句对象。 例如,像这样的代码 Statement st = con.getStatement(); st.execute(TABLE1_DELETE_Query); st.execute(TABLE2_DELETE_Query); st.close(); 我看了SF上类似的问题,但我找不到可以回答我问题的答案。如果已经答复,请仅提及参考资料 谢谢语句的生命周期应该是短期的,但是重复使用

虽然已经讨论过很多次,但是要在尽可能短的范围内关闭数据库资源。我想知道是否可以重用不返回任何结果集的语句对象。 例如,像这样的代码

 Statement st = con.getStatement();
 st.execute(TABLE1_DELETE_Query);
 st.execute(TABLE2_DELETE_Query);
 st.close();
我看了SF上类似的问题,但我找不到可以回答我问题的答案。如果已经答复,请仅提及参考资料


谢谢

语句的生命周期应该是短期的,但是重复使用它们是完全可以的

单个未关闭的结果集可能会导致应用程序挂起,但您可以有100条未关闭的语句,而不会出现问题。通常,一条语句将保留与数据库连接相关的一小段内存,而其他的则很少,但它可以保留多个结果集,正如getMoreResults()方法返回的结果集一样,getWarnings()方法的警告

在单个方法中多次重用一条语句,然后关闭它是一种很好的做法,因为这样可以避免不必要地创建额外语句。创建一个声明并保持它以防需要它是一种糟糕的做法


PreparedStatement旨在重复使用,但最好将其保留在单一方法的范围内,因为这保证了它们的使用寿命较短。

作为一般性意见,我建议使用
PreparedStatement
,而不仅仅是
Statement
。谢谢,我想知道在非resultset结果场景中如何重用语句对象。是的,您可以根据需要多次重用语句对象,前提是它使用连接对象初始化到的同一数据库进行事务处理。只需稍微多做一些清理。您是否建议即使在短范围内,只要我们继续关闭resultset,我们也可以恢复返回resultset的语句。或者当语句只是返回布尔值或非结果集时。如果结果集关闭,您确实可以重用返回结果集的语句。理想情况下,语句和结果集应该由Java7TryWithResources结构来处理,这将确保它们始终处于关闭状态。如果这不是一个选项,请确保您有一个finally子句来关闭它们,并在不掩盖任何早期异常的情况下处理来自close的任何异常。