개발/JAVA

자바(JDBC)로 오라클 데이터베이스 연동하기

예니03 2025. 2. 21. 09:05
반응형

자바에서 데이터베이스를 다루기 위해 JDBC(Java Database Connectivity)를 사용합니다. 이번 포스팅에서는 오라클 데이터베이스와 연결하여 데이터를 조회하고 조작하는 간단한 프로그램을 만들어 보겠습니다. 

1. JDBC란?

JDBC는 자바에서 데이터베이스와 상호작용할 수 있도록 도와주는 API입니다. 데이터베이스와 연결하여 데이터를 입력, 수정, 삭제, 조회하는 기능을 제공합니다.

JDBC 프로그래밍 흐름

  1. JDBC 드라이버 로드
  2. 데이터베이스 연결
  3. SQL 실행
  4. 결과 처리
  5. 연결 종료

 

2. 오라클 데이터베이스 연결하기 (ConnectionTest.java)

먼저, 오라클 데이터베이스에 연결하는 코드를 작성해 봅시다.

package com.javaex.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionTest {
    public static void main(String[] args) {
        String dburl = "jdbc:oracle:thin:@localhost:1521:xe";
        String dbuser = "hr";
        String dbpass = "hr";

        Connection conn = null;
        
        try {
            // JDBC 드라이버 로드
            Class.forName("oracle.jdbc.driver.OracleDriver");
            
            // 데이터베이스 연결
            conn = DriverManager.getConnection(dburl, dbuser, dbpass);
            System.out.println("연결 성공!");
        } catch (ClassNotFoundException e) {
            System.err.println("JDBC 드라이버를 로드하지 못했습니다.");
        } catch (SQLException e) {
            System.err.println("SQL Error!");
        } finally {
            try {
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

코드 설명

  • Class.forName("oracle.jdbc.driver.OracleDriver") : JDBC 드라이버를 로드합니다.
  • DriverManager.getConnection(dburl, dbuser, dbpass) : 데이터베이스에 연결합니다.
  • conn.close() : 연결을 종료합니다.

 

3. 사원 이름과 매니저 이름 조회하기 (HREmpList.java)

데이터베이스에서 사원과 매니저의 이름을 조회해 보겠습니다.

package com.javaex.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class HREmpList {
    public static void main(String[] args) {
        String dburl = "jdbc:oracle:thin:@localhost:1521:xe";
        String dbuser = "hr";
        String dbpass = "hr";

        try (Connection conn = DriverManager.getConnection(dburl, dbuser, dbpass);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT e.first_name || ' ' || e.last_name AS employee_name, m.first_name || ' ' || m.last_name AS manager_name FROM employees e JOIN employees m ON e.manager_id = m.employee_id ORDER BY employee_name DESC")) {

            while (rs.next()) {
                String employeeName = rs.getString("employee_name");
                String managerName = rs.getString("manager_name");
                System.out.printf("사원: %s, 매니저: %s%n", employeeName, managerName);
            }
        } catch (SQLException e) {
            System.err.println("SQL Error!");
        }
    }
}

코드 설명

  • ResultSet 객체를 사용하여 데이터베이스에서 검색된 결과를 가져옵니다.
  • ORDER BY employee_name DESC를 사용하여 사원 이름을 내림차순 정렬합니다.

 

4. 급여 검색 프로그램 (HRSalary.java)

사용자로부터 입력받은 최소 급여와 최대 급여 범위에 해당하는 사원 목록을 출력하는 프로그램을 만들어 보겠습니다.

package com.javaex.jdbc;

import java.sql.*;
import java.util.Scanner;

public class HRSalary {
    public static void main(String[] args) {
        String dburl = "jdbc:oracle:thin:@localhost:1521:xe";
        String dbuser = "hr";
        String dbpass = "hr";

        try (Scanner scanner = new Scanner(System.in);
             Connection conn = DriverManager.getConnection(dburl, dbuser, dbpass);
             PreparedStatement stmt = conn.prepareStatement("SELECT first_name, last_name, salary FROM employees WHERE salary BETWEEN ? AND ? ORDER BY salary ASC")) {

            System.out.print("최소 급여: ");
            int minSalary = scanner.nextInt();
            System.out.print("최대 급여: ");
            int maxSalary = scanner.nextInt();

            stmt.setInt(1, minSalary);
            stmt.setInt(2, maxSalary);
            ResultSet rs = stmt.executeQuery();

            while (rs.next()) {
                System.out.printf("%s %s 	%d%n", rs.getString("first_name"), rs.getString("last_name"), rs.getInt("salary"));
            }
        } catch (SQLException e) {
            System.err.println("SQL Error!");
        }
    }
}

코드 설명

  • Scanner를 사용하여 사용자 입력을 받습니다.
  • PreparedStatement를 사용하여 SQL 문을 실행합니다.
  • BETWEEN ? AND ?를 사용하여 최소 급여와 최대 급여 범위 내의 사원을 검색합니다.

 

5. 부서 목록 조회 (SelectTest.java)

마지막으로, 부서 목록을 출력하는 프로그램을 작성해 보겠습니다.

package com.javaex.jdbc;

import java.sql.*;

public class SelectTest {
    public static void main(String[] args) {
        String dburl = "jdbc:oracle:thin:@localhost:1521:xe";
        String dbuser = "hr";
        String dbpass = "hr";
        
		// Connection, Statement, ResultSet
		// try - with - resources 문 (자동 자원 정리)
		// AutoCloseable 인터페이스를 구현한 클래스들을 사용 가능하다.
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;

        try (Connection conn = DriverManager.getConnection(dburl, dbuser, dbpass);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT department_id, department_name FROM departments")) {

            while (rs.next()) {
                System.out.printf("%d: %s%n", rs.getInt("department_id"), rs.getString("department_name"));
            }
        } catch (SQLException e) {
            System.err.println("SQL Error!");
        }
    }
}

코드 설명

  • 부서 ID와 부서명을 조회하는 간단한 SELECT 문을 실행합니다.
  • try-with-resources를 사용하여 자원을 자동으로 정리합니다.

 

결론

이제 자바에서 JDBC를 사용하여 오라클 데이터베이스와 상호작용하는 방법을 익혔습니다. 위 예제들을 응용하면 다양한 데이터베이스 응용 프로그램을 개발할 수 있습니다! 😊

반응형