以下のエラー事象が発生した場合は、データベースの切り替えが発生した可能性があります。この場合、コネクションの再接続を行って、トランザクションを再実行してください。
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);