java - 运行时 JDBC 程序中的 MySQLNonTransientConnectionException

标签 java mysql jdbc

我有一个 Java 中的 JDBC MySQL 连接。我的程序可以很好地执行简单的查询。

如果我运行同一个程序超过 10 个小时并执行查询,那么我会收到以下 MySQL 异常:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: 
Connection.close() has already been called. Invalid operation in 
this state.
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(
  Native Method)
  com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:
  No operations allowed after statement closed.
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(
  Native Method)

我没有在任何地方使用过 close() 方法。我创建了数据库连接并永远打开它并始终执行查询。我没有明确提到连接超时的地方。我无法确定问题所在。

这是我用于数据库连接的代码:

 String driver = PropertyReader.getDriver();
 String url = dbURLPath;
 Class.forName(driver);
 connectToServerDB = DriverManager.getConnection(url);
 connectToServerDB.setAutoCommit(false);

是什么导致了这个异常?

最佳答案

MySQL 在 8 小时超时后终止连接。您可以通过设置 wait_timeout 来修改超时。 MySQL 中的变量。

然而,一般来说,应用程序保持连接这么长时间并不是一个好主意。更好的方法是使用池化 API 设置连接池,例如 Apache DBCP。并从池中检索连接,而不是直接通过驱动程序。如果连接池由于某种原因(包括超时)而终止,连接池还将负责重新建立池连接。

关于java - 运行时 JDBC 程序中的 MySQLNonTransientConnectionException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2297356/

相关文章:

postgresql - 如何通过jdbc获取数据库函数体?

java - 如何加入两个与 JPA/Hibernate 的关联

java - Libgdx 将 Sprite 添加到数组并将它们绘制到屏幕上

java - matlab 调用 Findclass JNI 崩溃

java - java中的泛型编程

mysql - Grails 在启动期间创建 mysql 表

java - 将值写入文本文件,读取它并在db中显示

c# - 使用c#上传word文档或pdf到mysql数据库

mysql - SQL 查询复制值 - 初学者

java - 单击 java 按钮时执行 MySql 查询