>>613
try-catch ブロックで発生するのが SQLException だけとは限らんだろ。
正確に最後のステップまで完了したことを保障するなら (ちょっとダサいが) フラグでやるしかない。

boolean success = false;
try{
  // ...
  success = true;
} finally {
  try{
    if(success){
      con.commit();
    } else {
      con.rollback();
    }
  } catch(SQLException ex){/* */}
  try{ con.close(); } catch(SQLException ex){/* */}
}

commit, rollback, close は失敗しないという前提のコードだが (さすがにそれ以上はリカバリできんし)
気になるならスタックトレースくらい出せば良い。もう何年も考えてるが、これ以外思いつかんな。