JAVA/JAVA

Java | JDBC 예제 with Oracle

pathas 2020. 2. 13. 22:19

예제

실제로 Oracle DB에 접속해서 테이블을 생성하고
데이터 입력 / 검색 / 출력 후 DB관련 객체를 메모리에서 해제

package j200213;

import java.sql.*;

public class DBSelect3 {

    public static void main(String[] args) {
        // Connection 인터페이스의 객체 변수 선언
        Connection conn = null;

        // DB url 변수
        String url = "jdbc:oracle:thin:@localhost:1521:orcl";

        // SQL 문장 객체 변수
        // try~catch문 내부에 선언하면 변수로 인식을 못하는 경우가 발생
        Statement stmt = null; 			// 테이블 생성 SQL문장
        PreparedStatement pstmt = null; // 매개변수를 이용한 SQL 문장
        Statement stmt2 = null; 		// SELECT문
        ResultSet rs = null; 			// SELECT 결과 저장 ResultSet 변수
        String sql = "";				// SQL문 저장 변수

        // SQL 관련 메소드 사용시 SQLException 예외를 처리해야 함
        try {
            // JDBC 드라이버를 메모리에 올림
            Class.forName("oracle.jdbc.driver.OracleDriver");

            // 접속할 DB 정보로 Connection 객체 생성
            conn = DriverManager.getConnection(url, "scott", "tiger");
            System.out.println(conn);    // oracle.jdbc.driver.T4CConnection@27f8302d

            // Statement 객체 생성
            stmt = conn.createStatement();

            // 테이블 생성 SQL문장 작성
            sql = "CREATE TABLE MyTEST(name varchar2(20), age number)";

            // sql문장 실행 및 반환 값 저장
            int create = stmt.executeUpdate(sql);

            // 결과 확인
            System.out.println("테이블 생성 성공??: " + create);    // 테이블 생성 성공??: 0

            // INSERT문, 테이블에 데이터 입력
            sql = "INSERT INTO MyTEST VALUES(?, ?)";

            // SQL문장을 매개변수로 PreparedStatement 객체 생성
            pstmt = conn.prepareStatement(sql);

            // 첫 번째 매개변수(?)에 "홍길동" 전달
            pstmt.setString(1, "홍길동");

            // 두 번째 ?에 34 전달
            pstmt.setInt(2, 34);

            // INSERT문 실행 및 반환 값 저장
            int insert = pstmt.executeUpdate();

            // 결과 확인
            System.out.println("입력 데이터 개수: " + insert);    // 입력 데이터 개수: 1

            // SELECT문, 테이블 내 데이터 조회
            stmt2 = conn.createStatement();

            // Query 반환값 ResultSet 객체 반환
            rs = stmt2.executeQuery("SELECT * FROM MyTEST");

            // 각각의 데이터를 담을 변수 선언
            String name; 	// 이름
            int age; 		// 나이

            // ResultSet의 다음 로우가 있는 동안 계속 데이터 조회
            while (rs.next()) {
                // name에 "name" 컬럼 데이터 저장
                name = rs.getString("name");

                // age에 "age" 컬럼 데이터 저장
                age = rs.getInt("age");

                // 출력
                System.out.println("이름: " + name + ", 나이: " + age);
                // 이름: 홍길동, 나이: 34
            }

        } catch (Exception e) {
            System.out.println(e);

          // 예외와 상관없이 메모리에서 해제하기 위해 finally문에 작성
        } finally {
            // close() 역시 예외 처리가 필요함
            try {
                // 메모리 해제
                rs.close();
                stmt2.close();
                pstmt.close();
                stmt.close();
                conn.close();

            } catch (SQLException e) {
                System.out.println(e);
            }
        }

    }

}

실제로 JDBC를 사용해서 Oracle DB에 접속해서 DDL, DML문을 수행하고

DB 관련 객체를 메모리에서 해제하는 과정에 대해 살펴보았습니다.

간단한 예제이지만 코드가 상당히 길기 때문에 DB에 접속해서 데이터를 읽어오고 처리하는

과정에 대해 정확히 파악하는 것이 중요하겠습니다.