在教程"Using Prepared Statements"中指出應始終關閉它們。假設我有一個功能何時應該關閉java PreparedStatement?
getPrice() {
}
我希望被稱爲每秒多次。這種方法是否應該用每一個方法調用打開和關閉PreparedStatement?這似乎是一個很大的開銷。
在教程"Using Prepared Statements"中指出應始終關閉它們。假設我有一個功能何時應該關閉java PreparedStatement?
getPrice() {
}
我希望被稱爲每秒多次。這種方法是否應該用每一個方法調用打開和關閉PreparedStatement?這似乎是一個很大的開銷。
首先,PreparedStatement
從不打開。這只是執行準備好的Statement
。該語句被髮送到執行由PreparedStatement
編譯的SQL語句的RDBMS。與SQL語句的連接應在SQL查詢期間打開,並在不需要其他RDMS調用時關閉。
您可以發送許多Statement
/PreparedStatement
根據您的需要提供你終於關閉其ResultSet
和PreparedStatement
一旦你與他們完成,然後關閉RDBMS連接。
正如本教程中的示例所示,應在所有查詢執行完畢後關閉它。
聲明關閉後,RDMS可能會釋放與您的聲明相關的所有資源。因此,要進一步使用它,您必須重新準備相同的聲明。
我認爲,在每次數據庫交互之後,如果你傾向於執行更多操作,那麼每個組件如語句,結果集都必須關閉,除了連接。
如果您一次又一次地準備好準備好的陳述,因爲您將一次又一次地使用相同的陳述,所以不必擔心任何性能問題。
這個方法是否應該用每一個方法調用打開和關閉PreparedStatement?
如果您要在該方法中創建PreparedStatement
對象,則必須在完成該操作後關閉它。您可以重複使用PreparedStatement
對象進行多次執行,但是一旦完成,您必須關閉它。
這是因爲儘管所有Statement對象(包括PreparedStatements)都應該在調用Connection.close()
時關閉,但很少出現這種情況。在某些JDBC驅動程序中,尤其是Oracle的驅動程序中,如果連接具有未關閉的ResultSet和Statement對象,驅動程序將無法關閉連接。這意味着,在這些驅動程序上:
是的。如果您創建準備好的語句n次,那麼沒有問題存在,因爲您將在所有地方使用相同的語句。這裏不需要有關於性能的任何觀察
謝謝