관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

데이터베이스와 JDBC 5 - 퀴즈로 정리합시다 문제 풀기 본문

웹 · 앱 개발/JSP & Servlet

데이터베이스와 JDBC 5 - 퀴즈로 정리합시다 문제 풀기

huenuri 2024. 12. 15. 12:05

퀴즈 문제를 풀어보며 이 단원을 정리해보겠다.


 

 

 

 

퀴즈로 정리합시다

 

 


 

 

 

문제 4번


 

 

 

 

문제 6번

JDBC 드라이버에 대한 이해를 돕기 위해서 프린터기를 예를 들어보겠다. 우리가 프린터를 구입했다고 하자. 이 프린터를 사용하려면 드라이버를 설치해야 한다. 드라이버는 컴퓨터와 프린터 사이의 의사소통을 위한 프로그램이다. 우리가 사용하려는 JDBC 드라이버도 자바와 오라클이라는 데이터베이스 사이의 의사소통을 위한 프로그램으로 이를 자바에 환경 설정해야만 오라클을 자바에서 사용할 수 있게 된다.


 

 

 

문제 8번

?를 사용하여 파라미터화된 SQL 구문을 작성할 때 사용하는 인터페이스는 PreparedStatement이다.

  • Statement는 쿼리를 매번 문자열로 작성해야 하지만, PreparedStatement는 미리 컴파일된 SQL을 재사용할 수 있어 성능과 보안(특히 SQL Injection 방지) 면에서 유리하다.
String query = "INSERT INTO member (name, userid, pwd, email, phone, admin) VALUES (?, ?, ?, ?, ?, ?)";

try (Connection conn = DriverManager.getConnection(url, uid, pass);
     PreparedStatement pstmt = conn.prepareStatement(query)) {

    pstmt.setString(1, "이소미");   // 1번째 ?에 값 설정
    pstmt.setString(2, "somi");
    pstmt.setString(3, "1234");
    pstmt.setString(4, "gmd@naver.com");
    pstmt.setString(5, "010-2362-5157");
    pstmt.setInt(6, 0);          // 6번째 ?에 값 설정

    int rowsInserted = pstmt.executeUpdate(); // 실행
    System.out.println(rowsInserted + " row(s) inserted.");
} catch (SQLException e) {
    e.printStackTrace();
}

 

 

 

 

 

 


 

 

 

 

문제 11번

이 문제를 JSP 코드로 직접 작성해보았다.

 

 

 

 

 

아직 테이블을 만들지 않아서 오류 문구가 뜨지만 코드 실행은 잘 된다.


 

 

 

 

 

문제 12번

답은 javax.sql이다.

 

해설

  • DataSource는 JDBC 2.0에서 추가된 인터페이스로, 커넥션 풀링(Connection Pooling) 및 트랜잭션 관리를 지원한다.
  • DataSource는 데이터베이스 연결을 설정하는 고급 방법으로 사용되며, 이 인터페이스를 사용하기 위해서는 javax.sql 패키지를 임포트해야 한다.

 

javax.sql 패키지 주요 클래스와 인터페이스

  • DataSource : 데이터베이스 연결을 관리하는 인터페이스
  • ConnectionPoolDataSource : 커넥션 풀링을 지원하기 위한 인터페이스
  • RowSet : JDBC의 결과 집합(ResultSet)을 캡슐화한 객체

 

예제 코드 (DataSource 사용 예시)

import java.sql.*;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;

public class DataSourceExample {
    public static void main(String[] args) {
        // DataSource 설정
        BasicDataSource ds = new BasicDataSource();
        ds.setUrl("jdbc:oracle:thin:@localhost:1521:XE");
        ds.setUsername("SCOTT");
        ds.setPassword("tiger");
        ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");

        // 데이터베이스 연결 및 쿼리 실행
        try (Connection conn = ds.getConnection();
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT * FROM member")) {

            while (rs.next()) {
                System.out.println("Name: " + rs.getString("name"));
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

 

 

핵심 포인트

  • DataSource를 사용할 때는 반드시 javax.sql 패키지를 임포트해야 함
  • JDBC API의 확장을 지원하며 커넥션 풀링과 같은 고급 기능을 제공함

 

 

 

 

 


 

 

 

문제 14번

문제의 정답은 ① Connection conn = DriverManager.getConnection(url, id, pw);일 가능성이 높다.

 

Connection conn = DriverManager.getConnection(url, id, pw);는 JDBC에서 데이터베이스 연결을 설정하기 위한 가장 기본적인 API이다.
이는 SQL 실행을 위해 첫 단계에서 필수로 사용된다.

 

각 선택지 분석

  1. Connection conn = DriverManager.getConnection(url, id, pw);
    • JDBC에서 데이터베이스와 연결을 설정하는 가장 기본적인 API이다.
    • SQL 실행을 위해 연결 객체 conn을 생성하는 부분으로 정답 가능성 가장 높음
  2. Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeUpdate(sql);
    • executeUpdate()는 SELECT 문이 아니라 INSERT, UPDATE, DELETE 문과 함께 사용된다.
    • SELECT 문을 다룰 때는 executeQuery()를 사용해야 하므로 잘못된 코드이다.
  3. PreparedStatement pstmt = conn.prepareStatement();
    • PreparedStatement는 매우 적합한 API지만, 이 문제는 기본 API 사용 여부를 묻는 질문일 가능성이 높으므로 정답으로 보기는 어렵다.
  4. ResultSet rs = stmt.executeQuery();
    • executeQuery()는 SELECT 문 실행에 사용되지만, 이 코드는 독립적으로 사용될 수 없다.
    • 적절한 흐름에서는 Statement 객체와 함께 사용해야 한다.

 

책에는 정답이 없다고 나오는데 이는 잘못된 것 같다. 내가 쓴 1번 답이 맞은 것이다.


 

 

 

 


 

 

 

 

학습을 마치고

퀴즈 문제를 스스로 풀어보는 사이에 JDBC에 대한 이해력이 더 높아진 것 같다. 책을 찾아서 풀기도 하고 내가 생각하는 답안을 쓰기도 했다.

어쨌든 거의 혼자서 풀었다고 할 수 있다.