应该何时关闭java PreparedStatement?

时间:2011-06-15 04:35:04

标签: java prepared-statement

在教程"Using Prepared Statements"中,它指出应始终关闭它们。假设我有一个功能

getPrice() {
}

我希望每秒多次调用。这种方法是应该在每次调用方法时打开和关闭PreparedStatement吗?这似乎是很多开销。

5 个答案:

答案 0 :(得分:13)

首先,永远不会打开PreparedStatement。它只是一个准备好的Statement被执行。该语句将发送到执行由PreparedStatement编译的SQL语句的RDBMS。应该在SQL查询期间打开与SQL语句的连接,并在不需要其他RDMS调用时关闭。

您可以根据需要发送多个Statement / PreparedStatement,前提是最后关闭其ResultSetPreparedStatement一旦完成与他们一起然后关闭RDBMS连接。

答案 1 :(得分:13)

  

这种方法是否应该在每次调用方法时打开和关闭PreparedStatement?

如果要在方法中创建PreparedStatement对象,则必须在完成后关闭它。您可以重复使用PreparedStatement对象进行多次执行,但一旦完成,您必须将其关闭。

这是因为尽管所有Statement对象(包括PreparedStatements)都应该在调用Connection.close()时关闭,但很少会这样。在某些JDBC驱动程序中,尤其是Oracle的驱动程序中,如果连接具有未关闭的ResultSet和Statement对象,则驱动程序将无法关闭连接。这意味着,对这些驱动程序:

  • 您永远不应该丢失对PreparedStatement对象的引用。如果这样做,那么在发生垃圾收集之前,连接将不会关闭。如果要为不同的SQL语句重用PreparedStatement实例,很容易忘记这一点。
  • 一旦不再需要,您应该关闭PreparedStatement。只有这样,Connection.close()才能真正拆除物理连接。

答案 2 :(得分:0)

正如教程中的示例所示,您应该在执行完所有查询后关闭它。

一旦声明关闭,RDMS可能会释放与您的声明相关的所有资源。因此,为了进一步使用它,你必须重新准备相同的声明。

答案 3 :(得分:0)

我认为,在每次数据库交互之后,必须关闭语句,结果集等每个组件,除了连接,如果你倾向于执行更多的操作。

如果你一次又一次地制作准备好的陈述,也没有必要担心,因为你将一次又一次地使用相同的陈述,不会有任何性能问题。

答案 4 :(得分:0)

是..如果您要多次创建预准备语句,则没有任何问题,因为您将在所有位置使用相同的语句。这里不需要对性能进行任何观察

由于

相关问题