[英]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.