2011-06-15 125 views

回答

13

首先,PreparedStatement從不打開。這只是執行準備好的Statement。該語句被髮送到執行由PreparedStatement編譯的SQL語句的RDBMS。與SQL語句的連接應在SQL查詢期間打開,並在不需要其他RDMS調用時關閉。

您可以發送許多Statement/PreparedStatement根據您的需要提供你終於關閉其ResultSetPreparedStatement一旦你與他們完成,然後關閉RDBMS連接。

0

正如本教程中的示例所示,應在所有查詢執行完畢後關閉它。

聲明關閉後,RDMS可能會釋放與您的聲明相關的所有資源。因此,要進一步使用它,您必須重新準備相同的聲明。

0

我認爲,在每次數據庫交互之後,如果你傾向於執行更多操作,那麼每個組件如語句,結果集都必須關閉,除了連接。

如果您一次又一次地準備好準備好的陳述,因爲您將一次又一次地使用相同的陳述,所以不必擔心任何性能問題。

13

這個方法是否應該用每一個方法調用打開和關閉PreparedStatement?

如果您要在該方法中創建PreparedStatement對象,則必須在完成該操作後關閉它。您可以重複使用PreparedStatement對象進行多次執行,但是一旦完成,您必須關閉它。

這是因爲儘管所有Statement對象(包括PreparedStatements)都應該在調用Connection.close()時關閉,但很少出現這種情況。在某些JDBC驅動程序中,尤其是Oracle的驅動程序中,如果連接具有未關閉的ResultSet和Statement對象,驅動程序將無法關閉連接。這意味着,在這些驅動程序上:

  • 您不應該失去對PreparedStatement對象的引用。如果這樣做,那麼連接將不會被關閉,直到垃圾收集發生。如果您將PreparedStatement實例重用於不同的SQL語句,很容易忘記這一點。
  • 一旦不再需要,您應該關閉PreparedStatement。只有這樣Connection.close()實際上才能斷開物理連接。
0

是的。如果您創建準備好的語句n次,那麼沒有問題存在,因爲您將在所有地方使用相同的語句。這裏不需要有關於性能的任何觀察

謝謝

相關問題