[Java] 자바 이클립스 JDBC 3. try ~ catach~ 를 이용하여 자원 해제시키기


JDBC 프로그래밍 : 자원의 해제


방법 1) finally 블록의 이용



finally를 통한 자원 헤제의 예제


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Test03_1 {
  public static void main(String[] args) {
 
    Connection con = null;
    Statement stmt = null;
    ResultSet rs = null;
   
    try {
      com.mysql.jdbc.Driver mysqlDriver = new com.mysql.jdbc.Driver();
      DriverManager.registerDriver(mysqlDriver);
     
      con = DriverManager.getConnection(
        "jdbc:mysql://localhost:3306/데이트베이스명" /* 연결할 DMBS와 데이터베이스 정보 */
        "유저명", /* 사용자 아이디*/
        "1111" /* 사용자 암호 */);
   
      stmt = con.createStatement();
      rs = stmt.executeQuery("select mno, name, tel, email from memb");
      while (rs.next()) {
        System.out.printf("%d, %s, %s, %s\n",
            rs.getInt("mno"),
            rs.getString("name"),
            rs.getString("tel"),
            rs.getString("email"));
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
        // try 블록 안에 한꺼번에 close()를 써주게 되면 앞에 있는 close()에서 오류가 났을 경우,
        // 그 다음에 오는 close()를 실행하지 않고 예외를 던지기 때문에 각각 try 문을 써줘야 한다.
        try {rs.close();} catch (Exception e) {}
        try {stmt.close();} catch (Exception e) {}
        try {con.close();} catch (Exception e) {}
    }
  }

}






방법 2) 클로저 (closure)를 이용한 방법



try (...) 안에 클로저 기법을 이용해 자동 자원 해제를 설정해주는 예제


import java.sql.Connection;

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Test03_2 {
  public static void main(String[] args) {
    try {
      com.mysql.jdbc.Driver mysqlDriver = new com.mysql.jdbc.Driver();
      DriverManager.registerDriver(mysqlDriver);
     
    } catch (Exception e) {
      e.printStackTrace();
      return;
    }
   
    try ( // 이 괄호 안에 선언하는 변수는 오직 java.lang.AutoCloseable 구현체 만이 가능하다.
      Connection con = DriverManager.getConnection(
        "jdbc:mysql://localhost:3306/데이터베이스명",
        "유저명",
        "1111");
   
      Statement stmt = con.createStatement();
      ResultSet rs = stmt.executeQuery("select mno, name, tel, email from memb");
    ) {
      while (rs.next()) {
        System.out.printf("%d, %s, %s, %s\n",
            rs.getInt("mno"),
            rs.getString("name"),
            rs.getString("tel"),
            rs.getString("email"));
      }
     
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}





블로그 이미지

필로그래머

,