728x90
반응형
[try-catch-finally]
public class OraDBConTest {
private static final String Driver = "oracle.jdbc.OracleDriver";
private static final String URL = "jdbc:oracle:thin:HostIp:포트번호:DB명";
private static final String USER="사용자명";
private static final String PW="비밀번호";
@Test
public void testCon() throws Exception{
try {
Class.forName(driver);
con = DriverManager.getConnection(URL,USER,PW);
if(conㅜ != null) {
System.out.println("DB 커넥션 성공!");
System.out.println("con : "+con);
}else {
System.out.println("DB정보를 받지 못했습니다.");
System.out.println("DB연결에 실패 했습니다.");
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try { con.close();}catch(Exception e) {e.printStackTrace();}
}
}
}
혹은
[try-catch-resources]
public class OraDBConTest {
private static final String Driver = "oracle.jdbc.OracleDriver";
private static final String URL = "jdbc:oracle:thin:HostIp:포트번호:DB명";
private static final String USER="사용자명";
private static final String PW="비밀번호";
@Test
public void testCon() throws Exception{
try(Connection con = DriverManager.getConnection(URL,USER,PW)) {
Class.forName(driver);
if(con != null) {
System.out.println("DB 커넥션 성공!");
System.out.println("con : "+con);
}else {
System.out.println("DB정보를 받지 못했습니다.");
System.out.println("DB연결에 실패 했습니다.");
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try { con.close();}catch(Exception e) {e.printStackTrace();}
}
}
}
자바 기본문법 두개 체크하고 가겠습니다.
[첫번재]
필드에 private로 선언된것 까지는 이해가 되는데 static final로 정적상수로 선언되어있습니다.
일단 상수는 관례적으로 영어 대문자로 합니다.
정적 상수는 주로 클래스로 직접 접근해서 사용하기위해 선언해줍니다.(예를들어 OraDBConTest.DRIVER 이렇게 )
하지만 private가 붙어이씅므로 다른클래스에서는 사용할수없고(싱글톤으로서 외부에서 생성자 호출을 막기위해) 해당클래스의 메인메서드나, 중첩클래스에서 활용할수있지 않을까 생각해봅니다.
[두번째]
위의코드와 아래코드의 두 코드 로직중 다른부분을 찾으셨나요?
바로 Try catch문입니다.
try-catch-resources 자동 리소스 닫기는 java 7 버전에서 추가된 문법으로 예외 발생여부와 상관없이 finally에서 항상 처리해줘야했던 리소스객체(입출력 스트림, 소켓 등)의 close()메소드를 호출하여 안전하게 리소스를 닫아줍니다.
Connection은 AutoClosable인터페이스를 구현 상속을 받았기 때문에 try문의 ( ) 괄호 내에서 객체를 생성하면
finally문에서 명시적 코드로 close() 메서드를 호출하여 닫지 않아도 자동으로 생성된 각 객체마다 메서드를 호출하여 자동으로 닫히게 해줍니다.
어쨋든
테스트 성공!
드라이버 정상 작동!
728x90
반응형