'국비지원'의 시작

자바 & 오라클 01 ( 자바를 통해 SQL문 실행하기 )

개발할 결심 2023. 2. 21. 17:23

 오라클에 대하여 배우고 나서, 이제는 자바를 통해서 SQL 문을 실행하는 법에 대해서 배우기 시작했다. 그렇다면, 코드를 보면서 어떤 식으로 SQL 문을 실행할 수 있는 지에 대해 설명해보도록 하겠다. 주석을 잘 참고하기를 바란다. 그렇다면, 제일 간단한 INSERT 문을 먼저 실행해보려고 한다. 

// Main 메소드 안의 내용이라고 가정한다.
// 자바를 통해서 SQL 문을 실행 시켜주기 위해서는 우선, 두가지를 초기화를 해줘야 한다.

Connection conn = null ; // Connection conn 은 데이터베이스 서버와 연결을 맺어주는 자바의 객체
PreparedStatement pstmt = null ; // PreparedStatement 는 연결한 DB 서버에 전송할
// SQL문 (편지)을 전송(전달) 해주는 객체(배달부)이다. 

// 그 다음으로 진행해야하는 것은 >>오라클 드라이버 로딩<< 이다.
// 오라클 드라이버의 역할은 다음 3가지이다. 

// 1. OrcaleDriver 를 메모리에 로딩시켜준다.
// 2. OracleDriver 객체를 생성해준다.
// 3. OracleDriver 객체를 DriverManager에 등록시켜준다.

try{
	Class.forName("oracle.jdbc.driver.OracleDriver") ;
// ClassNotFoundException 을 발생시킬수도 있기때문에, try, catch로 묶어줘야한다.

	conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","JDBC_USER","gclass");
    // getConnection 뒤의 들어갈 값에 대해서 어떤 값이 들어가는 지 알아보면 다음과 같다.
    // ("jdbc:oracle:thin:@연결할IP주소:1521:xe","Oracle아이디","Oracle비번");
    
	//
    String sql = " insert into tbl_memo ( no , name , msg ) "
    		  + " values( 1 , '개발할결심' , 'SQL연결하기' ) ";
    // SQL문을 작성하면서 조심해야할 것은 쌍따옴표 맨앞과 맨뒤에 스페이스 바를 넣어주는 것이
    // 오류를 발생시킬 가능성이 적다. 만약에 붙게된다면, 예컨대, msg)value 를 한 단어로
    // 인식할 가능성이 존재한다.
    
    pstmt = conn.prepareStatement(sql) ; 
    // 연결한 오라클서버(conn)에 SQL문을 전달할 객체 PrepareStatement 객체 생성하기
    
    int n = pstmt.executeUpdate() ; // .executeUpdate()는 int를 리턴시킨다. 
    // PreparedStatement 객체는 작성된 SQL문을 오라클 서버에 보내서 실행이 되도록 해야한다.
    
}catch(ClassNotFoundException e) {				   
	System.out.println(">>> ojdbc8.jar 파일이 없습니다. <<<");
}catch(SQLException e) { -- getConnection 에서 SQLException 이 발생할 가능성이 존재
// 해당 Exception은 SQL문이 잘못 되었을 경우 발생한다. 
	e.printStackTrace(); 
}finally { // 사용하였던 자원을 반납하기
		   // 반납의 순서는 생성순서의 역순으로 한다.
	pstmt.close();
    conn.close();
}

 위의 자바문을 실행하면, 위에서 정의한 SQL문처럼  TBL_MEMO 라는 테이블에 위에서 입력한 값들이 INSERT 된다.  이와 같은 방법으로 , 우리는 자바와 오라클을 연결하여, 사용할 수 있다. 예컨대, 데이터베이스에 저장되어 있는 테이블에서 값을 꺼내와서  CONSOLE에 뽑을 수 있다. 다음 내용은 어떻게 SELECT 하여 값을 가져올 수 있는 지 살펴보도록 하겠다. 그전에,  위에서는 INSERT 문을 실행하기 위해서 .executeUpdate( ) 를 사용하였지만, 모든 경우에 이를 사용하는 것은 아니다.  .excuteUpdate( ) ;  은 SQL 문이 DML문 ( INSERT , UPDATE , DELETE , MERGE ) 이거나  SQL문이 DDL문 ( CREATE , DROP ,ALTER , TRUNCATE ) 인 경우에 사용된다. .executeUpdate( ) ; 은 위에 주석문에 적어둔 것처럼 , .executeUpdate 는 int를 리턴해주는 이 때 return 되어지는 값은 적용되어진 행의 개수를 리턴시켜주는 것이다. 예를 들어, 위에서 처럼 한 행을 INSERT 했다면 리턴값은 1이 된다.  . executeQuery( ) ; 은 SQL문이 DQL( select ) 일 경우에 사용된다.