こんにちは、Java で実行され、JDBC を介して MySQL データベースと通信するアプリケーションを作成しています。私が抱えている問題は、このアプリケーションがリアルタイム アプリケーションであり、データベースへの接続がどこかでダウンすることは避けられないことです。コードのスケッチは次のとおりです。
int result = 0;
Statement st = null;
ResultSet rs = null;
System.out.println("Obatining reference to main connection");
Connection conne = Main.connection;
try {
System.out.println("In try");
System.out.println("Creating statement");
st = conne.createStatement();
System.out.println("Obtaining result");
rs = st.executeQuery("Properly constructed and tested sql query");
rs.last();
result = rs.getRow();
System.out.println("Exiting try");
}catch(SQLException se){
se.printStackTrace();
}finally{
System.out.println("In finally");
try { rs.close(); } catch (Exception e) { /* ignored */ }
try { st.close(); } catch (Exception e) { /* ignored */ }
}
return result;
結果の取得を印刷した後、プログラムがフリーズします。接続がアクティブな場合、すべて正常に動作しますが、データベースがダウンしないように保護する必要があります。これをテストする方法は、このメソッドを実行する直前にデータベースから切断することです。例外がスローされたり、エラーが生成されたりすることはありません。結果の取得が出力されると、プログラムは単にハングします。誰かがこのシナリオから回復する方法を知っていることを望んでいましたか? ここでも、アプリケーションは完全に実行されますが、データベースが利用できない状態から回復できるようにする必要があります。
詳しくは:
切断とは、vpn を介してデータベースに接続し、データベースを使用不可にするために vpn をシャットダウンすることを意味します。
誰かが、SQL が適切にフォーマットされていないと投稿しました。はっきりさせておきますが、これは実際の SQL ステートメントではありません。実際のステートメントを入れたくないのですが、有効なステートメントは同じ望ましくない効果を生み出すため、実際には関係ありません。