[英]Closing assigned instance variable
我正在使用Java和數據庫。 我有一個連接類PgConnection,在這個類中,我有一個私有的連接變量
private Connection Con = null;
在構造函數中創建Connection
Properties props = new Properties();
props.load(Thread.currentThread().getContextClassLoader()
.getResourceAsStream("database.properties"));
String url = props.getProperty("db.url");
String user = props.getProperty("db.user");
String passwd = props.getProperty("db.passwd");
Class.forName("org.postgresql.Driver");
this.con = DriverManager.getConnection(url, user, passwd);
當在我的代碼中使用這個con
變量時,我一直在通過將其分配給函數內的局部變量來引用它Connection conn = this.con;
這是正確的做法嗎? 如果是這樣,我是否應該在退出函數之前關閉conn
。 完成PgConnection的特定實例后,我就有一個Close()方法來關閉this.con
謝謝
當然,如果在打開連接的同一方法中關閉連接,則安全得多,而且操作起來也更容易,因為這樣您的方法就可以控制數據庫連接的生命周期。 如果可能的話,您的方法應始終使用try-with-resources語句 ,以確保即使在發生異常的情況下也可以關閉連接:
public void performDatabaseOperation(...) {
// initialize properties here, load driver etc. here
try (Connection con = DriverManager.getConnection(url, user, pwd)) {
// use connection.
// it will be closed automatically at the end of this code block
// even if exceptions occure!
}
}
當然,如果您希望對調用代碼進行更多控制,則可以使用上述方法將連接打開與關閉分開。 但是請記住,這將導致狀態以及調用代碼無法正確/在正確的時間點close
的危險。
當您的API提供幾種對數據庫進行操作並且可以按任意順序調用的方法時,您可能必須給調用者提供生命周期控制的一個示例,並且所有操作應在同一事務內/使用同一連接運行。
只需考慮一下在您的個別情況下使用兩個單獨的方法open()
和close()
相反的優點,即只使用一個perform()
方法。 如果沒有,請保持簡單!
是的,您需要每次都關閉連接,除非它具有持久性單元連接。 基本上,您可以編寫一種方法來獲取任何操作的數據庫連接,並且應該在放置數據庫相關內容的方法內部關閉連接。
請參閱此鏈接以獲取更多信息。
如果在退出方法之前關閉本地conn
,則本地conn
引用的原始Connection實例con
也將被關閉,並且您無法使用該連接進行任何進一步的操作。
要考慮的主要點是,此處conn
和con
指的是同一Connection實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.