在构造函数中打开数据库连接,何时应该关闭?

3

我一直在考虑通过保持与数据库的连接来加快数据库请求速度,只要使用该对象,就保持数据库连接处于打开状态。因此,我考虑在该类的构造函数中打开连接。

现在的问题是,在停止使用后如何关闭连接?我需要在某个地方调用close()方法,对吗?

我一直在阅读有关finalize()方法的内容,但人们似乎对在任何地方使用此方法持怀疑态度。我希望它有类似于析构函数的东西,但Java没有这个,那怎么办呢?

所以,有人能给我提供一个解决方案吗?提前谢谢。


1
finalize 只有在您想要自动释放非 Java 资源时才有用。数据库连接很可能已经覆盖了 finalize 方法,并将自行关闭。手动关闭连接或使用 Java7 的此特性 - Piotr Praszmo
可能是Java有析构函数吗?的重复问题。 - Raedwald
2个回答

4

我建议将您的类实现 java.io.Closeable 接口。根据这个接口,您需要实现 void close() throws IOException 方法,因为关闭 Closeable 类是一种良好的习惯。


1
从Java 7开始,有AutoCloseable可以使用,因此您可以抛出任何异常,而不仅仅是IOException。 - gustafc

4
我建议您实现数据库连接池,如果应用程序允许的话。使用连接池会创建一组连接并保持与数据库的连接。然后,您的应用程序将从池中获取一个打开/未使用的连接,使用它并将其返回到池中。
这将使您能够更快地获取连接,并且您不必太多地修改类。如果您需要扩展应用程序,则数据库连接池是一种很好的技术。
另一个好处是,您的数据库连接池将由某种驱动程序管理,该驱动程序将负责打开连接,保持连接打开,如有需要增加池大小,以及在一定时间内未使用额外连接时缩小池大小。这类似于您尝试在构造函数和终结方法中实现的代码。
通常情况下,您只在需要时获取数据库连接,并尽快释放它。

1
+1 - 连接池可以满足OP的需求,只是以更加受控和标准化的方式实现。 - gustafc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接