Java 保持数据库连接打开,还是在每次需要时重新打开?

Java 保持数据库连接打开,还是在每次需要时重新打开?,java,database,jdbc,database-connection,Java,Database,Jdbc,Database Connection,我知道这类问题已经被问过好几次了,我读过一些,但没有变得更聪明。 我的Java应用程序通过SSH隧道通过JDBC连接到数据库服务器。隧道一开始就打开一次。启动时,每次使用数据库连接时,我都会打开它。由于应用程序中的更改,我需要在启动时打开连接,并决定将其保持打开状态,直到我的应用程序关闭。当我关闭应用程序时,有时(并非总是)会出现以下错误: - Could not retrieve transation read-only status server java.sql.SQLExcepti

我知道这类问题已经被问过好几次了,我读过一些,但没有变得更聪明。 我的Java应用程序通过SSH隧道通过JDBC连接到数据库服务器。隧道一开始就打开一次。启动时,每次使用数据库连接时,我都会打开它。由于应用程序中的更改,我需要在启动时打开连接,并决定将其保持打开状态,直到我的应用程序关闭。当我关闭应用程序时,有时(并非总是)会出现以下错误:

 - Could not retrieve transation read-only status server

 java.sql.SQLException: Could not retrieve transation read-only status server
 Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

 The last packet successfully received from the server was 369.901 milliseconds ago.  The last packet sent successfully to the server was 8 milliseconds ago.
 Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
这可能是因为始终打开数据库连接吗?我只测试应用程序很短的时间。它将在4台计算机上全天运行。那么我能更经常地预料到这个错误吗?连接每隔几分钟使用一次,因此保持连接打开应该会更有效,但在中断期间,可能会有半小时不使用连接

你建议我做什么?当我遇到此错误时,是否总是重新打开连接或保持原样并找到解决方法?您是否知道出现此错误的原因

只要问问您是否需要更多的错误日志、数据库代码或任何您需要的东西


谢谢

我想说是的,您的问题可能是因为您有一个持久连接打开

不久前我接管了一个网站,我之前的那个家伙也有同样的想法:打开一个连接,在需要时通过它发送查询,永远不要关闭它。在我接管网站一个月后,数据库就不会再像这样返回任何查询结果了


作为一个一般的经验法则和良好的编程实践,总是在自己之后清理。如果没有使用变量,请将其设置为null并删除。不使用连接?终止它。java中的这种方式比C++中的要少得多,因为java在很大程度上对你进行了清理。

我会使用某种连接池来解决,这个连接池可以用来管理连接。虽然您可以打开一次连接,但您确实会遇到同时运行多个查询的问题,这可能会混淆结果。vpn可能正在终止连接。许多VPN监视长时间运行的连接并终止它们。大多数连接池都有一个选项,可以限制在删除连接和创建新连接之前可以重用连接的次数。