以下のエラー事象が発生した場合は、データベースの切り替えが発生した可能性があります。この場合、コネクションの再接続を行って、トランザクションを再実行してください。
SQLExceptionのgetSQLState()に"57P01"が返却される。
SQLExceptionのgetSQLState()に"08006"が返却される。
Statement st; Connection conn = DriverManager.getConnection(~); … try { // SQLの実行 st = conn.createStatement(); String sql = "~"; st.executeQuery(sql); } catch (SQLException e) { if (e.getSQLState().equals("08006") || e.getSQLState().equals("57P01")){ try { conn.close(); } catch (SQLException e1) { } // 再接続処理へ } else { throw e; //その他のエラー } }
注意
データベースの切り替えが完了するまでは、コネクションの接続がエラー終了し、SQLExceptionのgetSQLState()に"08001"のエラーが返却されます。
5秒間隔で20回、再接続をリトライする場合。
int count = 0; Connection conn = null; … do { count++; try { conn = DriverManager.getConnection( ~ ); //再接続完了 } catch (SQLException e) { if (!e.getSQLState().equals("08001") || count > 20){ throw e; // 再接続失敗 } } try { Thread.sleep(5000); } catch (InterruptedException e1) { throw e; } } while (true);