1. ホーム
  2. java

[解決済み] JDBCプログラム実行時にMySQLNonTransientConnectionExceptionが発生する。

2022-02-09 15:42:10

質問

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);

その例外の原因は何ですか?

解決方法は?

設定ファイルを変更するか、データベースのタイムアウト時間を長くする必要があります。データベースが8時間以上アイドル状態の場合、デフォルトでデータベースはクローズされます。

ありがとうございます。