Java 我必须什么时候关闭数据库连接?(爪哇)

Java 我必须什么时候关闭数据库连接?(爪哇),java,postgresql,jdbc,Java,Postgresql,Jdbc,因此,我有一个Java进程,它作为TCP服务器无限期地运行(从另一个进程接收消息,并具有onMsg处理程序) 我想在Java程序中处理消息的一件事是使用到postgres的数据库连接将其写入磁盘。现在,我有一个静态连接对象,每次收到消息时都会调用它。我不会为每封邮件关闭和重新打开连接 我对Java还是有点陌生,我想知道1)使用一个无限期打开的连接对象是否存在任何陷阱或危险,2)从不关闭连接是否有性能优势,而不是每次我想访问数据库时都重新打开/关闭连接 谢谢你的帮助 我不会为每封邮件关闭和重新打开

因此,我有一个Java进程,它作为TCP服务器无限期地运行(从另一个进程接收消息,并具有onMsg处理程序)

我想在Java程序中处理消息的一件事是使用到postgres的数据库连接将其写入磁盘。现在,我有一个静态连接对象,每次收到消息时都会调用它。我不会为每封邮件关闭和重新打开连接

我对Java还是有点陌生,我想知道1)使用一个无限期打开的连接对象是否存在任何陷阱或危险,2)从不关闭连接是否有性能优势,而不是每次我想访问数据库时都重新打开/关闭连接

谢谢你的帮助

我不会为每封邮件关闭和重新打开连接

是的,你知道。。。至少就普通
连接
对象而言。否则,如果您最终导致连接断开,它将永远断开,如果您需要同时执行多个操作,您将遇到问题

您需要的是一个连接池来管理到数据库的“真实”连接,您只需为每个操作请求来自连接池的连接,并在完成操作后将其关闭。关闭“逻辑”连接只会返回到池的“真实”连接以进行另一个操作。(池可以处理通过心跳保持连接活动,随着时间的推移使连接退役等)


有很多可用的连接池技术,而且我已经很久没有使用“普通”JDBC了,所以我不想说目前的最新技术在哪里-但这是你可以自己做的研究:)

创建数据库连接总是一个性能上的问题。只有非常简单的实现才能为每个操作创建和关闭连接。如果你每小时只需要做一次,那么这是可以接受的

但是,如果您有一个程序每分钟执行几次数据库访问(对于较大的应用程序,甚至每秒执行几次数据库访问),则不希望实际关闭连接

那你什么时候关闭连接?简单回答:让连接池为您处理。您向池请求一个连接,它会给您一个打开的连接(它要么缓存了,要么如果它真的需要的话,提供一个全新的连接)。完成查询后,您可以关闭连接,但实际上它只是将连接返回到池中

对于非常简单的程序,设置连接池可能是额外的工作,但这并不十分困难,而且肯定是您想要掌握的窍门。有几个开源连接池,例如来自Apache的
DBCP
3CPO

检查答案。尽管这是针对PHP的,但它仍然可以回答为什么不必要地保持连接打开是不好的。