[Day 13 | DB] java.sql JDBC 클래스의 전체 흐름

y♡ding·2024년 10월 30일
0

데브코스 TIL

목록 보기
88/163

1. JDBC 드라이버 로딩

JDBC 드라이버는 자바 애플리케이션과 데이터베이스를 연결하는 중요한 역할을 합니다. 드라이버 로딩은 JDBC를 사용하기 위한 첫 번째 단계입니다.

  • 사용 클래스: java.lang.Class
  • 메서드: Class.forName(), System.setProperty()
  • 설명: Class.forName() 메서드를 사용해 JDBC 드라이버 클래스를 로드합니다. 이 과정에서 드라이버가 메모리에 로드되고, 데이터베이스 연결에 필요한 설정이 완료됩니다.
Class.forName("org.mariadb.jdbc.Driver"); // 예: MariaDB 드라이버 로딩

2. 데이터베이스 연결

드라이버 로딩 후, 데이터베이스에 연결을 설정합니다. 이 과정에서는 DriverManager를 통해 Connection 객체를 생성하여 데이터베이스와의 통신 경로를 마련합니다.

  • 사용 클래스: java.sql.DriverManager, java.sql.Connection
  • 메서드: DriverManager.getConnection()
  • 설명: DriverManager.getConnection() 메서드를 사용하여 데이터베이스 URL, 사용자 이름, 비밀번호를 전달하여 데이터베이스에 연결합니다. 연결이 성공하면 Connection 객체가 반환됩니다.
Connection conn = DriverManager.getConnection("jdbc//localhost:3306/sample", "user", "password");

3. Statement 생성

데이터베이스와 연결되면 SQL 문을 전송할 수 있는 Statement, PreparedStatement, CallableStatement 중 하나를 생성합니다. 이 객체들은 SQL 쿼리를 실행하고, 결과를 가져오는 역할을 합니다.

  • 사용 클래스: java.sql.Statement, java.sql.PreparedStatement, java.sql.CallableStatement
  • 설명:
    • Statement: 정적 SQL 문을 실행할 때 사용합니다.
    • PreparedStatement: 파라미터화된 SQL 문을 실행할 때 사용하며, 보안성과 성능이 향상됩니다.
    • CallableStatement: 저장 프로시저를 호출할 때 사용합니다.
Statement stmt = conn.createStatement();PreparedStatement pstmt = conn.prepareStatement("INSERT INTO employees (empno, ename) VALUES (?, ?)");

4. SQL 문 전송

SQL 문을 StatementPreparedStatement 객체를 통해 데이터베이스로 전송하여 실행합니다. SQL 문이 SELECT 문인지, 아니면 INSERT, UPDATE, DELETE와 같은 DML 문인지에 따라 다른 메서드를 사용합니다.

  • 메서드: executeQuery(), executeUpdate()
  • 설명:
    • executeQuery(): SELECT문을 실행하고, 결과로 ResultSet을 반환합니다.
    • executeUpdate(): INSERT, UPDATE, DELETE 문을 실행하고, 영향을 받은 행의 수를 반환합니다.
ResultSet rs = stmt.executeQuery("SELECT * FROM employees"); // SELECT 쿼리 실행
int rowsAffected = pstmt.executeUpdate(); // DML 실행

5. 결과 받기 (SQL 결과)

SELECT 쿼리 실행 결과는 ResultSet 객체에 저장됩니다. ResultSet은 조회된 데이터를 행 단위로 접근할 수 있도록 지원하며, 각 행의 열 데이터를 가져올 수 있습니다.

  • 사용 클래스: java.sql.ResultSet
  • 설명: ResultSet 객체는 SQL SELECT 쿼리의 결과를 저장하며, 행 단위로 결과를 순회할 수 있습니다.
while (rs.next()) {
    int empno = rs.getInt("empno");
    String ename = rs.getString("ename");
}

6. 연결 해제

모든 데이터베이스 작업이 완료되면 Connection, Statement, ResultSet 등의 리소스를 해제하여 자원을 효율적으로 관리합니다.

  • 사용 클래스: java.sql.Connection, java.sql.Statement, java.sql.ResultSet
  • 메서드: close()
  • 설명: close() 메서드를 사용하여 각 객체를 닫고, 데이터베이스와의 연결을 해제합니다. 이 단계는 자원 누수를 방지하기 위해 필수적입니다.
rs.close();
stmt.close();
conn.close();

예외 처리

JDBC 작업 중 예외가 발생할 수 있으므로, SQLException을 통해 예외 처리를 수행합니다.

  • 사용 클래스: java.sql.SQLException
  • 설명: SQL 관련 오류는 SQLException 예외로 처리하며, 각 예외의 메시지를 통해 구체적인 오류 정보를 확인할 수 있습니다.
try {
    // 데이터베이스 연결 및 작업 수행
} catch (SQLException e) {
    System.out.println("SQL 오류: " + e.getMessage());
}

0개의 댓글

관련 채용 정보