Connection conn = null;
  PreparedStatement pstmt = null; // <-------- !!
  ResultSet rs = null;
  try {
    conn = ......;
    pstmt = conn.prepareStatement("select .... ?...?");
    pstmt.setString(1,"xxxx");
    pstmt.setString(2,"yyyy");
    rs = pstmt.executeQuery(); <--- 여기서 SQLException 이 일어나더라도...
    while(rs.next()){
      ....
    }
    //rs.close();
    //pstmt.close(); 
  }
  finally{
    if ( rs != null ) try {rs.close();}catch(Exception e){}
    if ( pstmt != null ) try {pstmt.close();}catch(Exception e){} // <-- !!!!
    if ( conn != null ) ......;
  }



=============================================================================================================
반복문을 이용할 때

Connection conn = null; PreparedStatement pstmt = null; try { conn = ......; pstmt = conn.prepareStatement("update .... ?... where id = ?"); for(int i=0;i<10;i++){ pstmt.clearParameters(); pstmt.setString(1,"xxxx"); pstmt.setString(2,"id"+(i+1) ); int affected = pstmt.executeUpdate(); if ( affected == 0 ) throw new Exception("NoAffected"); else if ( affedted > 1 ) throw new Exception("TooManyAffected"); } } finally{ if ( pstmt != null ) try {pstmt.close();}catch(Exception e){} if ( conn != null ) ......; }

PreparedStatement 라는 것이, 한번 파싱하여 동일한 SQL문장을 곧바로 Execution할 수
  있는 장점이 있는 것이고, 궁극적으로 위와 같은 경우에 효과를 극대화 할 수 있는
  것이지요.
-------------------------------------------------------  
  본 문서는 자유롭게 배포/복사 할 수 있으나 반드시
  이 문서의 저자에 대한 언급을 삭제하시면 안됩니다
================================================
  자바서비스넷 이원영
  E-mail: javaservice@hanmail.net
  PCS:010-6239-6498
================================================
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST