Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在构造函数中打开数据库连接,我应该什么时候关闭它?_Java_Database Connection_Destructor - Fatal编程技术网

Java 在构造函数中打开数据库连接,我应该什么时候关闭它?

Java 在构造函数中打开数据库连接,我应该什么时候关闭它?,java,database-connection,destructor,Java,Database Connection,Destructor,嗯,我一直在考虑通过在对象使用期间保持与数据库的连接处于打开状态来加快数据库请求的速度。所以我想在该类的构造函数中打开连接。 现在的问题是,停止使用后如何关闭连接?我得找个地方叫close(),不是吗? 我一直在读finalize()方法,但人们似乎对该方法在任何地方的使用都持怀疑态度。我希望它有类似析构函数的东西,但Java没有,所以呢 有谁能给我一个解决方案吗?提前感谢。我建议让您的类成为的实现者。根据此接口,您必须实现void close()抛出IOException,该类的所有客户端都将

嗯,我一直在考虑通过在对象使用期间保持与数据库的连接处于打开状态来加快数据库请求的速度。所以我想在该类的构造函数中打开连接。 现在的问题是,停止使用后如何关闭连接?我得找个地方叫close(),不是吗? 我一直在读finalize()方法,但人们似乎对该方法在任何地方的使用都持怀疑态度。我希望它有类似析构函数的东西,但Java没有,所以呢


有谁能给我一个解决方案吗?提前感谢。

我建议让您的类成为的实现者。根据此接口,您必须实现
void close()抛出IOException
,该类的所有客户端都将调用它,因为在使用后关闭
可关闭的
类是一种很好的做法。

如果应用程序允许,我建议您最好实现数据库连接池。通过连接池,将创建一个连接池,并保持与数据库的连接。然后,您的应用程序将从池中获取一个打开/未使用的连接,并使用它将其返回到池中

这将允许您更快地获取连接,并且不必对类进行太多修改。如果需要扩展应用程序,数据库连接池是一种很好的技术

另一个好处是,您的数据库连接池将由某种驱动程序进行管理,这些驱动程序将负责打开连接、保持连接的打开状态、根据需要增加连接池以及在一定时间内不使用额外连接时缩小连接池。这与您试图在构造函数和终结方法中实现的代码类似


一般来说,只有在需要时才需要数据库连接,并尽快将其释放。

finalize
仅当您希望自动释放非java资源时才有用。数据库连接很可能已经覆盖了
finalize
方法,并将自行关闭。手动关闭use的连接。从Java 7开始,可能存在重复,您可以使用它,因此您可以抛出您喜欢的任何异常,而不仅仅是IOException。+1-连接池以一种更受控制和标准化的方式实现OP想要的功能。