对非结果集生成的查询重用Statement

时间:2012-03-12 10:36:39

标签: java database

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

 Statement st = con.getStatement();
 st.execute(TABLE1_DELETE_Query);
 st.execute(TABLE2_DELETE_Query);
 st.close();

我查看了有关SF的类似问题,但我无法找到可以回答我的问题。如果已经回答,请提及参考。

由于

1 个答案:

答案 0 :(得分:3)

陈述的有效期应保持短期,但重新使用它们完全没问题。

单个未关闭的ResultSet可能会导致应用程序挂起,但您可以拥有100个未关闭的语句而不会出现问题。通常,语句将保留与数据库连接相关联的非常小的内存,而不是其他内容,但它可以保存多个结果集,这些结果集可以由getMoreResults()方法返回,警告getWarnings()方法。 / p>

在一个方法中多次重复使用Statement然后关闭它是一种很好的做法,因为它可以节省不必要地创建额外的语句。创建一个声明并挂在它上面以防它被通缉是不好的做法。

PreparedStatements旨在重复使用,但最好将它们保留在单个方法的范围内,因为这可以保证它们具有短期寿命。