High Level Programming Language/JDBC Database Access

Processing SQL Statements with JDBC

헬로우월드 2025. 4. 6. 16:33

JDBC를 사용한 SQL 문 처리

일반적으로 JDBC를 사용하여 SQL 문을 처리할 때는 다음과 같은 단계를 따릅니다:

  1. 연결을 설정한다.
  2. Statement를 생성한다.
  3. 쿼리를 실행한다.
  4. ResultSet 객체를 처리한다.
  5. 연결을 종료한다.

이 페이지에서는 튜토리얼 샘플에서 제공되는 CoffeesTable.viewTable 메서드를 사용하여 이러한 단계를 설명합니다. 이 메서드는 COFFEES 테이블의 내용을 출력합니다. 이 메서드는 튜토리얼 후반에서 더 자세히 설명됩니다:

public static void viewTable(Connection con) throws SQLException {
  String query = "select COF_NAME, SUP_ID, PRICE, SALES, TOTAL from COFFEES";
  try (Statement stmt = con.createStatement()) {
    ResultSet rs = stmt.executeQuery(query);
    while (rs.next()) {
      String coffeeName = rs.getString("COF_NAME");
      int supplierID = rs.getInt("SUP_ID");
      float price = rs.getFloat("PRICE");
      int sales = rs.getInt("SALES");
      int total = rs.getInt("TOTAL");
      System.out.println(coffeeName + ", " + supplierID + ", " + price +
                         ", " + sales + ", " + total);
    }
  } catch (SQLException e) {
    JDBCTutorialUtilities.printSQLException(e);
  }
}

Connection 설정하기

먼저 사용하려는 데이터 소스에 연결을 설정해야 합니다. 데이터 소스는 DBMS, 레거시 파일 시스템 또는 JDBC 드라이버가 대응되는 기타 데이터 원본일 수 있습니다. 이 연결은 Connection 객체로 표현됩니다. 더 자세한 내용은 "Establishing a Connection"을 참조하세요.

 

Statement 생성하기

Statement는 SQL 문을 나타내는 인터페이스입니다. Statement 객체를 실행하면 ResultSet 객체가 생성되며, 이는 데이터베이스 결과 집합을 나타내는 테이블입니다. Statement 객체를 생성하려면 Connection 객체가 필요합니다.

예를 들어, CoffeesTable.viewTable은 다음 코드로 Statement 객체를 생성합니다:

stmt = con.createStatement();

Statement에는 세 가지 종류가 있습니다:

  • Statement: 파라미터가 없는 단순한 SQL 문을 구현할 때 사용
  • PreparedStatement: (Statement를 확장) 입력 파라미터를 포함할 수 있는 SQL 문을 미리 컴파일할 때 사용. 자세한 내용은 "Using Prepared Statements" 참조
  • CallableStatement: (PreparedStatement를 확장) 입력 및 출력 파라미터를 포함할 수 있는 저장 프로시저를 실행할 때 사용. 자세한 내용은 "Stored Procedures" 참조

 

쿼리 실행하기

쿼리를 실행하려면 Statement의 다음과 같은 execute 메서드를 호출하면 됩니다:

  • execute: 쿼리의 첫 번째 결과가 ResultSet 객체일 경우 true를 리턴. 쿼리가 하나 이상의 ResultSet 객체를 리턴할 가능성이 있는 경우 사용. Statement.getResultSet을 반복 호출하여 결과 집합을 얻음
  • executeQuery: 하나의 ResultSet 객체를 리턴
  • executeUpdate: SQL 문에 의해 영향을 받은 행 수를 나타내는 정수를 리턴. INSERT, DELETE, UPDATE 문에 사용

예를 들어, CoffeesTable.viewTable에서는 다음과 같이 Statement 객체를 실행합니다:

ResultSet rs = stmt.executeQuery(query);

자세한 내용은 "Retrieving and Modifying Values from Result Sets"를 참조하세요.

 

ResultSet 객체 처리하기

ResultSet 객체의 데이터에 접근하려면 커서를 통해 접근합니다. 이 커서는 데이터베이스 커서가 아니라, ResultSet 객체 내에서 하나의 행을 가리키는 포인터입니다. 처음에는 커서가 첫 번째 행 이전에 위치합니다. 커서를 이동시키기 위해 ResultSet 객체에서 정의된 다양한 메서드를 호출할 수 있습니다.

예를 들어, CoffeesTable.viewTableResultSet.next 메서드를 반복적으로 호출하여 커서를 한 행씩 앞으로 이동시키고, 각 행의 데이터를 출력합니다:

ResultSet rs = stmt.executeQuery(query);
while (rs.next()) {
  String coffeeName = rs.getString("COF_NAME");
  int supplierID = rs.getInt("SUP_ID");
  float price = rs.getFloat("PRICE");
  int sales = rs.getInt("SALES");
  int total = rs.getInt("TOTAL");
  System.out.println(coffeeName + ", " + supplierID + ", " + price +
                     ", " + sales + ", " + total);
}

자세한 내용은 "Retrieving and Modifying Values from Result Sets"를 참조하세요.

 

연결 종료하기

Connection, Statement, 또는 ResultSet 객체를 더 이상 사용하지 않게 되면 close 메서드를 호출하여 해당 리소스를 즉시 해제해야 합니다.

또는 try-with-resources 구문을 사용하면 SQLException 발생 여부와 관계없이 Connection, Statement, ResultSet 객체를 자동으로 닫을 수 있습니다. (JDBC는 데이터 소스와 상호작용 중 오류가 발생하면 SQLException을 발생시킵니다. 자세한 내용은 "Handling SQL Exceptions" 참조.)

try-with-resources 구문은 try 구문과 하나 이상의 선언된 리소스로 구성됩니다. 예를 들어, CoffeesTable.viewTable 메서드는 다음과 같이 Statement 객체를 자동으로 닫습니다:

public static void viewTable(Connection con) throws SQLException {
  String query = "select COF_NAME, SUP_ID, PRICE, SALES, TOTAL from COFFEES";
  try (Statement stmt = con.createStatement()) {
    ResultSet rs = stmt.executeQuery(query);
    while (rs.next()) {
      String coffeeName = rs.getString("COF_NAME");
      int supplierID = rs.getInt("SUP_ID");
      float price = rs.getFloat("PRICE");
      int sales = rs.getInt("SALES");
      int total = rs.getInt("TOTAL");
      System.out.println(coffeeName + ", " + supplierID + ", " + price +
                         ", " + sales + ", " + total);
    }
  } catch (SQLException e) {
    JDBCTutorialUtilities.printSQLException(e);
  }
}

다음 구문은 하나의 리소스(stmt)를 선언한 try-with-resources 구문이며, try 블록이 종료될 때 자동으로 닫힙니다:

try (Statement stmt = con.createStatement()) {
  // ...
}

자세한 내용은 Essential Classes의 "The try-with-resources Statement"를 참조하세요.