[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();
}
}