現在、多くの異なるクエリがあり、すべてが特定の時間に実行されるわけではない Java アプリケーションがあります。したがって、クエリごとに新しいステートメントと結果セットを作成し、それらをすぐに閉じる予定ですか? 以下に、現在クエリを実行する方法のコード スニペットを示します。各クエリを try と catch でカバーしようとしましたが、クエリが失敗した場合、グローバル レベルでロールバックが機能しないという問題があります。メモリリークもないようにするには、どのように配置するのが最善ですか?
try{ //main try outside
//lots of inner queries run based on some logics of if else etc
//sample query of opening and closing both statement and resultsets.
Statement stmt1 = null;
stmt1 = dbconn.createStatement();
String selectQuery1 = "Select query";
ResultSet rs1 = stmt1 .executeQuery(selectQuery1);
while(rs1.next()) {
//process here
}
try{
if (rs1 != null ){
rs1.close();
}
if (stmt1!= null ){
stmt1.close()
}
}
catch(SQLException ex){
ex.printStackTrace(System.out);
}
dbconn.commit();
}
catch (SQLException ex) {
try {
dbconn.rollback();
}
catch (Exception rollback){
rollback.printStackTrace(System.out);
}
}
catch (Exception e){
try{
dbconn.rollback();
}
catch (Exception rollback) {
rollback.printStackTrace(System.out);
}
}