Home [Java 프로그래밍] 14강 - JDBC 프로그래밍
Post
Cancel

[Java 프로그래밍] 14강 - JDBC 프로그래밍

💡해당 게시글은 방송통신대학교 김희천 교수님의 'Java 프로그래밍' 강의를 개인 공부 목적으로 메모하였습니다.



학습 개요


  • Java 프로그램에서 데이터베이스 프로그래밍을 위해 JDBC API를 사용함
  • JDBC API를 사용하려면 DBMS 별로 존재하는 JDBC 드라이버가 필요함
  • JDBC 기술을 사용하여 DBMS에 연결하고 각종 SQL 구문을 실행하며 결과를 받아 처리하는 방법을 학습함



학습 목표


  • JDBC 기능을 설명하고 드라이버를 설치할 수 있음
  • MariaDB를 설치하고 사용할 수 있음
  • Java 프로그램에서 MariaDB에 연결하여 데이터베이스를 사용할 수 있음
  • 데이터베이스 프로그래밍에 사용되는 여러 인터페이스를 설명할 수 있음



강의록


JDBC와 MariaDB

데이터베이스 기초

  • 데이터베이스
    • 데이터를 모아 놓은 집합 장소
  • DBMS
    • 데이터베이스 관리 시스템
    • 데이터베이스의 효과적 관리를 위한 응용 소프트웨어
    • 관계형 DBMS에서는 데이터를 테이블 형태로 저장함
      • DBMS는 여러 데이터베이스들로 구성됨
      • 하나의 데이터베이스는 여러 테이블들로 구성됨
      • 하나의 테이블은 여러 레코드(행)들로 구성됨
      • 하나의 레코드는 여러 필드(열)들로 구성됨
      • 각 필드에 데이터를 저장하며, 레코드를 식별하는 키 필드가 존재함

관계형 데이터베이스

  • 테이블
    • 관계형 데이터베이스에서 데이터 구조화를 위한 기본 자료 구조
    • 테이블은 고유한 이름을 가짐
    • 테이블은 행(레코드 또는 엔터티)과 열(속성 또는 필드)로 구성됨
    ID제목작성자작성날짜조회수내용
    1시작홍길동2024/05/111252첫 번째 글의 내용
    2과정이순신2024/05/12197두 번째 글의 내용
    3마무리김유신2024/05/1394세 번째 글의 내용
  • 스키마
    • 테이블의 이름과 구조를 정의
    • 테이블의 구조란 테이블을 구성하는 속성(필드, 열)들에 대한 정보
    필드 이름데이터 타입길이
    IDINT-
    제목VARCHAR100
    작성자VARCHAR20
    작성날짜DATE-
    조회수INT-
    내용VARCHAR500

DBMS 설치

  • MariaDB를 설치하기로 함
    • https://www.mariadb.org/download/ 에 접속
    • MariaDB Server 설치 프로그램을 다운로드
      • mariadb-11.7.*-winx64.msi을 실행시킴
      • 설치 과정에서 root 계정의 암호를 정하고 기억해야 함

        image.png

      • 기본적으로 C:\Program Files\MariaDB 11.7에 설치됨
      • 기본 포트는 3306
    • https://dev.mysql.com/doc/index-other.html 에 접속하여 샘플 데이터베이스로 world database를 다운로드하여 설치
      • world-db.zip 파일에서 world.sql을 이용하여 설치

MariaDB 사용

  • MariaDB 서버 프로그램이 실행 중인지 확인
    • 데몬을 실행하려면 시작 메뉴의 Windows 관리 도구에서 서비스 실행
      • 또는 윈도우 시작 버튼을 클릭하고, 찾기에서 서비스를 타이핑함

        image.png

      • 서비스 목록에서 MariaDB 서비스의 상태 확인

  • MySQL Client (MariaDB 11.7 (x64)) 프로그램을 실행
    • 시작 메뉴 → MariaDB 11.7 (x64) → MySQL Client (MariaDB 11.7 (x64))

      image.png

    • 또는 명령 프롬프트 창에서 mysql -u root -p를 실행

      image.png

      • 먼저 C:\Program Files\MariaDB 11.7\bin 경로를 Path에 추가해야 함

샘플 데이터베이스 설치

  • https://dev.mysql.com/doc/index-other.html 에 접속하여 샘플 데이터베이스 world database를 다운로드하여 설치
    • world-db.zip 파일에서 world.sql을 이용하여 설치

    image.png

    image.png

    1
    2
    
      Enter password: *******
      source c:/db/world.sql
    
    1
    2
    3
    
      show databases;
      use world;
      show tables;
    

MariaDB 서버에 연결하기

JDBC

  • JDBC(Java DataBase Connectivity) API
    • Java 프로그램에서 관계형 DBMS와 연동하여 데이터를 사용하고 관리할 수 있게 하는 Java API 표준 규격
      • 데이터베이스에 연결하고, 데이터베이스에 대해 질의, 갱신, 삽입, 삭제를 요청하고, 결과를 받기 위한 프로그래밍 방법을 제공
      • JDK의 일부로 포함되어 있음(java.sql 패키지)

MariaDB JDBC 드라이버

  • JDBC 드라이버
    • JDBC API는 DBMS 제조사가 제공하는 JDBC 드라이버를 통해 구현됨
    • 사용하려는 DBMS의 JDBC 드라이버를 다운로드 받아 설치해야 함
      • JDBC API를 사용한 데이터베이스 연동 프로그램을 실행할 수 있음
  • MariaDB JDBC 드라이버
    • MariaDB용 JDBC API를 구현한 소프트웨어
      • .jar 파일 형식으로 제공됨
    • Java 프로그램에서 MariaDB와 연동하는 경우, Java 8+ Connector가 필요함

MariaDB 연결 프로그램 만들기

  • 이클립스 설정
    • 자바 프로젝트 생성
      • 프로젝트 이름을 지정
        • ex) JDBCExample
      • module-info.java 파일을 만들지 말 것
    • 드라이버 파일울 Classpath에 추가
      • 프로젝트 설정에서 Project → Properties → Java Build Path → Libraries → Classpath → Add External JARs…를 이용하여 mariadb-java-client-3.3.3.jar를 추가함
      • 또는 마우스 오른쪽 버튼으로 Build Path → Configure Build Path… → Java Build Path → Libraries → Classpath → Add External JARs…를 이용
  • MariaDB 접속 프로그램 예

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
      // MariaDB 데이터베이스 연결 정보 설정
      String url = "jdbc:mariadb://localhost:3306/world"; // DB URL
      String user = "root";                              // DB 계정 사용자 이름
      String pass = "root";                           // DB 계정 비밀번호
        
      // try-with-resources를 사용하여 데이터베이스 연결, 쿼리 실행, 결과 처리
      try (Connection conn = DriverManager.getConnection(url, user, pass); // DB 연결 생성
          Statement stmt = conn.createStatement(); // 쿼리를 실행할 객체 생성
          ResultSet rs = stmt.executeQuery("SELECT * FROM city limit 0, 50")) { // 쿼리 실행
        
          // 결과 출력 시, 헤더(컬럼 제목) 형식 지정 및 출력
          System.out.println(String.format("%-10s", "ID") +
          String.format("%-35s", "Name") +
          String.format("%-15s", "CountryCode") +
          String.format("%-20s", "District") +
          String.format("%-11s", "Population"));
    
          // ResultSet으로 조회된 결과를 반복하여 한 행씩 출력
          while (rs.next()) {
              // 각 컬럼 값을 읽어서 정렬된 형식으로 출력
              System.out.print(String.format("%-10d", rs.getInt("ID")));            // ID 컬럼
              System.out.print(String.format("%-35s", rs.getString("Name")));      // Name 컬럼
              System.out.print(String.format("%-15s", rs.getString("CountryCode")));// CountryCode 컬럼
              System.out.print(String.format("%-20s", rs.getString("District")));  // District 컬럼
              System.out.println(String.format("%-11d", rs.getInt("Population"))); // Population 컬럼
          }
      }
      // ID      Name                  CountryCode      District      Population
      // 1       Kabul                 AFG              Kabol         1780000
      // 2       Qandahar              AFG              Qandahar      237500
      // 3       Herat                 AFG              Herat         186800
    

MariaDB 연동 프로그래밍

MariaDB 연동 프로그래밍 순서

  • JDBC 패키지를 import
    • import java.sql.*;
  • JDBC 드라이버를 동적으로 로드
    • Class.forName("org.mariadb.jdbc.Driver"); 호출
    • 최신 JDBC 버전에서는 생략해도 됨
  • MariaDB 서버 프로그램과 연결 설정
    • DriverManager.getConnection(url, user, pass) 호출
  • SQL 구문의 실행과 결과 처리
    • Connection, Statement, ResultSet 객체 사용
  • 연결 해제
    • 사용 중인 데이터베이스 자원을 반납
      • finally 블록에서 rs.close(); stmt.close(); conn.close(); 실행
      • try-with-resource 구문을 사용하면 이 부분이 자동 처리됨

MariaDB 서버에 연결하기

  • 방법
    • DriverManager.getConnection**(url, user, pass) 메소드는 URL, 사용자 아이디, 비밀번호를 이용하여 MariaDB 서버에 접속을 시도
    • 성공하면 Connection 유형의 객체를 리턴
    1
    2
    3
    4
    5
    6
    7
    8
    
      String url = "jdbc:mariadb://localhost:3306/world";
      String user = "root";
      String pass = "mariadb";
      try(Connection conn = DriverManager.getConnection(url, user, pass);
          Statement stmt = conn.createStatement();
          ResultSet rs = stmt.executeQuery("SELECT * FROM city limit 0, 50")) {
        
      }
    

Statement 객체

  • SQL 구문을 실행하고 결과를 반환해 주는 객체
  • Connection 객체의 createStatement() 메소드를 통해 생성됨
  • 주요 메소드

    메소드설명
    boolean execut(String sql)SQL 구문을 실행하며, select 구문을 실행하는 경우 true를 리턴하고 이어서 getResultSet()를 호출할 수 있음, update/insert/delete 구문의 경우 false를 리턴하며 getUpdateCount()를 호출할 수 있음
    ResultSet getResultSet()SQL 구문(execute로 실행)을 실행한 결과를 리턴
    int getUpdateCoun()SQL 구문(execute로 실행)의 실행으로 영향을 받은 행의 개수를 리턴
    ResultSet executeQuery(String sql)select 구문 실행할 때 사용되며, 실행 결과를 나타내는 테이블인 ResultSet 객체를 리턴
    int executeUpdate(String sql)update, insert, delete 구문 실행할 때 사용하며, 영향 받은 행의 개수를 리턴

Statement 객체로 select 구문 실행하기

  • Statement 객체를 생성하고 executeQuery() 또는 execute()를 호출
  • 쿼리 결과를 읽을 때는 ResultSet 객체에서 읽음

    1
    2
    3
    4
    5
    6
    7
    8
    
      try(Connection conn = DriverManager.getConnection(url, user, pass);
          Statement stmt = conn.createStatement();
          ResultSet rs = stmt.executeQuery("SELECT * FROM city limit 0, 50")) {
          while(rs.next()) {
              System.out.print(String.format("%-10d", rs.getInt("ID")));
              System.out.print(String.format("%-35s", rs.getString("Name")));
          }
      }
    
    1
    2
    3
    4
    5
    6
    7
    8
    
      try(Connection conn = DriverManager.getConnection(url, user, pass);
          Statement stmt = conn.createStatement()) {
          ResultSet rs = null;
          if(stmt.execute("SELECT * FROM city limit 0, 50")) rs = stmt.getResultSet();
          while(rs.next()) {
    
          }
      }
    

ResultSet 객체

  • select 구문의 실행 결과를 나타내는 테이블
    • Statement 객체의 getResultSet(), executeQuery() 메소드가 리턴한 객체
    • 테이블에서 한 행을 가리키는 커서를 가짐

    image.png

  • select 구문을 실행하여 ResultSet 객체가 생성되면 커서가 만들어지고, select 구문의 실행 결과를 가리킴
    • 커서는 행을 가리키는 포인터, 기본적으로 위에서 아래로 진행
    • 커서의 초기 값은 첫 행의 직전 행을 가리킴

ResultSet의 메소드

  • 주요 메소드

    메소드설명
    boolean next()커서를 다음 행으로 이동 시킴
    boolean previous()커서를 이전 행으로 이동 시킴
    Statement getStatement()현재 ResultSet을 생성 시킨 Statement 객체를 리턴
    String getString(int index), String getString(String columnName)ResultSet 객체에서 해당 열의 문자열을 리턴, 첫 번째 필드의 인덱스는 1
    int getInt(int index), int getInt(String columnName)ResultSet 객체에서 해당 열의 int 값을 리턴

Statement 객체로 insert, update, delete 구문 실행하기

  • Statement 객체를 생성하고 executeUpdate()를 호출
  • 영향을 받은 행의 개수가 리턴 됨

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
      try (Connection conn = DriverManager.getConnection(url, user, pass);
      Statement stmt = conn.createStatement()) {
          int resultCount = stmt.executeUpdate("insert into 테이블이름 values ...");
          System.out.println(resultCount + "개의 행이 삽입되었습니다.");
          resultCount = stmt.executeUpdate("update 테이블이름 set ...");
          System.out.println(resultCount + "개의 행이 변경되었습니다.");
          resultCount = stmt.executeUpdate("delete from 테이블이름 where ...");
          System.out.println(resultCount + "개의 행이 삭제되었습니다.");
      }
    
    1
    2
    
      if(!stmt.execute("delete from 테이블이름 where ..."))
          System.out.println(stmt.getUpdateCount() + " 개의 행 삭제");
    

DatabaseMetaData 객체, PreparedStatement 객체, ResultSetMetaData 객체

DatabaseMetaData 객체

  • 드라이버나 데이터베이스의 정보를 제공하는 메소드를 가진 인터페이스
  • Connection 객체의 getMetaData() 메소드로 객체를 생성
  • 주요 메소드

    메소드설명
    String getDriverName()JDBC 드라이버 이름을 리턴
    String getURL()연결에 사용된 DBMS URL을 리턴
    String getUserName()연결에 사용된 데이터베이스 사용자

DatabaseMetaData 사용 예

  • DBMS 정보 알아내기

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
      import java.sql.*;
        
      public class Main {
          public static void main(String[] args) {
              String url = "jdbc:mariadb://localhost:3306/world";
              String user = "root";
              String pass = "mariadb";
              try {
                  Class.forName("org.mariadb.jdbc.Driver");
              } catch (Exception ex) {
                  System.out.println(ex);
              }
              try (Connection conn = DriverManager.getConnection(url, user, pass)) {
                  System.out.println(conn.getMetaData().getDriverName());
                  System.out.println(conn.getMetaData().getDriverVersion());
                  System.out.println(conn.getMetaData().getURL());
                  System.out.println(conn.getMetaData().getUserName());
              } catch (Exception ex) {
                  System.out.println(ex);
              }
          }
      }
    
    1
    2
    3
    4
    
      MariaDB Connector/J
      3.5.3
      jdbc:mariadb://localhost/world?user=root&password=***
      root
    

DBMS와 Java의 자료형 변환

  • DBMS 테이블에서 필드의 자료형과 Java의 자료형, 그리고 JDBC 메소드 간의 관계

    DBMS 자료형Java 자료형ResultSet 메소드PreparedStatement 메소드
    CHARStringgetString()setString()
    VARCHARStringgetString()setString()
    INTEGERintgetInt()setInt()
    DATEjava.sql.DategetDate()setDate()

PreparedStatement 객체

  • Precompiled된 SQL 문을 표현
  • 객체는 Connection 객체의 prepareStatement(String sql) 메소드를 통해 생성됨
    • 객체를 생성할 때 SQL 구문이 주어짐 (Statement 객체의 경우 실행할 때 제공)
  • 같은 SQL 문을 여러 번 반복 실행할 때 효율적임
    • SQL문에 매개 변수(?)를 사용하고, 실행 전에 값을 지정할 수 있음
    1
    2
    3
    4
    5
    6
    
      Connection conn = DriverManager.getConnection(url, user, pass);
      String query = "SELECT * FROM 테이블이름 WHERE 필드1=? and 필드2> ?";
      PreparedStatement ps = conn.prepareStatement(query);
      ps.setString(1, "필드값");
      ps.setInt(2, 숫자);
      ResultSet rs = ps.executeQuery();
    

PreparedStatement의 메소드

  • 주요 메소드
    • SQL 구문을 실행하는 PreparedStatement 객체가 가지고 있으므로, SQL 구문을 실행하는 메소드에는 인자가 없음
    메소드설명
    boolean execute()객체가 가진 SQL 구문을 실행함
    ResultSet executeQuery()SQL 쿼리 문을 실행하고 ResultSet 객체를 리턴
    int executeUpdate()insert, update 또는 delete 문을 실행
    void setInt(int parameterIndex, int x)SQL 구문의 매개변수(?)에 int 값을 지정, SQL 구문에서 첫 번째 ?의 인덱스는 1임
    void setString(int parameterIndex, String x)SQL 구문의 매개변수(?)에 문자열 값을 지정

PreparedStatement의 사용 예

  • PreparedStatement 객체 사용하기

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
      String query = "SELECT * FROM city WHERE population > ?";
      try (Connection conn = DriverManager.getConnection(url, user, pass);
           PreparedStatement ps = conn.prepareStatement(query);
           ResultSet rs = getPS(ps, 1, 9000000).executeQuery()) { 
          System.out.println(String.format("%-10s", "ID") + String.format("%-35s",
                             "Name") + String.format("%-15s",
                             "CountryCode") + String.format("%-20s",
                             "District") + String.format("%-11s", "Population"));
          while (rs.next()) {
              System.out.print(String.format("%-10d", rs.getInt("ID")));
              System.out.print(String.format("%-35s", rs.getString("Name")));
              System.out.print(String.format("%-15s", rs.getString("CountryCode")));
              System.out.print(String.format("%-20s", rs.getString("District")));
              System.out.println(String.format("%-11d", rs.getInt("Population")));
          }
      }
    
    1
    2
    3
    4
    
      ID Name CountryCode District Population
      206 São Paulo BRA São Paulo 9968485
      939 Jakarta IDN Jakarta Raya 9604900
      1024 Mumbai (Bombay) IND Maharashtra 10500000
    

ResultSetMetaData 객체

  • ResultSet 객체에서 테이블의 이름, 열의 이름과 타입 정보를 얻을 때 사용하는 객체
    • ResultSetgetMetaData() 메소드로 생성함
  • 주요 메소드

    메소드설명
    String getColumnName(int index)index 위치의 컬럼 이름을 리턴
    int getColumnCount()ResultSet의 컬럼 개수를 리턴
    int getColumnType(int index)index 위치의 컬럼 자료형을 리턴
    String getTableName(int index)index 위치의 컬럼을 포함하는 테이블의 이름을 리턴

ResultSetMetaData 사용 예

  • ResultSetMetaData 객체

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    
      import java.sql.*;
        
      try (Connection conn = DriverManager.getConnection(url, user, pass);
           Statement stmt = conn.createStatement();
           ResultSet rs = stmt.executeQuery("SELECT * FROM city limit 0, 50")) {
          ResultSetMetaData rsmd = rs.getMetaData(); // ResultSet 메타데이터 가져오기
          int colCount = rsmd.getColumnCount();
        
          // 컬럼 이름 출력
          for (int i = 1; i <= colCount; i++) {
              System.out.print(rsmd.getColumnName(i) + (i < colCount ? ", " : ""));
          }
          System.out.println();
        
          // 결과 출력
          while (rs.next()) {
              for (int i = 1; i <= colCount; i++) {
                  switch (rsmd.getColumnType(i)) {
                      case Types.INTEGER:
                          System.out.print(rs.getInt(i) + (i < colCount ? ", " : ""));
                          break;
                      case Types.VARCHAR: // VARCHAR 타입 처리
                      case Types.CHAR:    // CHAR 타입 처리
                          System.out.print(rs.getString(i) + (i < colCount ? ", " : ""));
                          break;
                      default: // 기본적으로 문자열로 처리
                          System.out.print(rs.getString(i) + (i < colCount ? ", " : ""));
                          break;
                  }
              }
              System.out.println();
          }
      }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    
      ID, Name, CountryCode, District, Population
      1, Kabul, AFG, Kabol, 1780000
      2, Qandahar, AFG, Qandahar, 237500
      3, Herat, AFG, Herat, 186800
      4, Mazar-e-Sharif, AFG, Balkh, 127800
      5, Amsterdam, NLD, Noord-Holland, 731200
      6, Rotterdam, NLD, Zuid-Holland, 593321
      7, Haag, NLD, Zuid-Holland, 440900
      8, Utrecht, NLD, Utrecht, 234323
      9, Eindhoven, NLD, Noord-Brabant, 201843
      10, Tilburg, NLD, Noord-Brabant, 193238
      11, Groningen, NLD, Groningen, 172701
      12, Breda, NLD, Noord-Brabant, 160398
      13, Apeldoorn, NLD, Gelderland, 153491
      14, Nijmegen, NLD, Gelderland, 152463
      15, Enschede, NLD, Overijssel, 149544
      16, Haarlem, NLD, Noord-Holland, 148772
      17, Almere, NLD, Flevoland, 142465
      18, Arnhem, NLD, Gelderland, 138020
      19, Zaanstad, NLD, Noord-Holland, 135621
      20, ´s-Hertogenbosch, NLD, Noord-Brabant, 129170
      21, Amersfoort, NLD, Utrecht, 126270
      22, Maastricht, NLD, Limburg, 122087
      23, Dordrecht, NLD, Zuid-Holland, 119811
      24, Leiden, NLD, Zuid-Holland, 117196
      25, Haarlemmermeer, NLD, Noord-Holland, 110722
      26, Zoetermeer, NLD, Zuid-Holland, 110214
      27, Emmen, NLD, Drenthe, 105853
      28, Zwolle, NLD, Overijssel, 105819
      29, Ede, NLD, Gelderland, 101574
      30, Delft, NLD, Zuid-Holland, 95268
      31, Heerlen, NLD, Limburg, 95052
      32, Alkmaar, NLD, Noord-Holland, 92713
      33, Willemstad, ANT, Curaçao, 2345
      34, Tirana, ALB, Tirana, 270000
      35, Alger, DZA, Alger, 2168000
      36, Oran, DZA, Oran, 609823
      37, Constantine, DZA, Constantine, 443727
      38, Annaba, DZA, Annaba, 222518
      39, Batna, DZA, Batna, 183377
      40, Sétif, DZA, Sétif, 179055
      41, Sidi Bel Abbès, DZA, Sidi Bel Abbès, 153106
      42, Skikda, DZA, Skikda, 128747
      43, Biskra, DZA, Biskra, 128281
      44, Blida (el-Boulaida), DZA, Blida, 127284
      45, Béjaïa, DZA, Béjaïa, 117162
      46, Mostaganem, DZA, Mostaganem, 115212
      47, Tébessa, DZA, Tébessa, 112007
      48, Tlemcen (Tilimsen), DZA, Tlemcen, 110242
      49, Béchar, DZA, Béchar, 107311
      50, Tiaret, DZA, Tiaret, 100118
    



학습 정리


  • MariaDB는 MySQL과 호환되는 오픈 소스 관계형 데이터베이스 관리 시스템임
  • JDBC는 Java 프로그램에서 관계형 데이터베이스와 연동할 수 있게 하는 표준 API임
  • JDBC 프로그래밍을 위해서는 MariaDB용 JDBC 드라이버로 .jar 파일을 다운로드 받아 Classpath에 추가해야 함
  • DBMS와 연결을 설정할 때는 java.sql.Connection 객체를 사용함
  • SQL 구문을 실행할 때 Statement 인터페이스의 execute(), executeQuery(), executeUpdate()를 사용할 수 있음
  • select 구문을 실행할 때 executeQuery()를 호출하며, 검색 결과가 ResulteSet 객체로 리턴 됨
  • 같은 SQL 문을 여러 번 실행할 때는 PreparedStatement 객체를 사용하는 것이 효율적이며, SQL 문에 매개변수를 사용하고 실행 전에 값을 지정할 수 있음



연습 문제


  1. JDBC 프로그래밍에 사용되는 클래스나 인터페이스가 아닌 것은?

    a. Runnable

    • JDBC 프로그래밍에 사용 되는 클래스나 인터페이스는?
      • Connection
      • DriverManager
      • Statement
  2. PreparedStatement 객체에 대한 설명으로 잘못된 것은?

    a. PreparedStatementStatement의 부모 인터페이스임

    • PreparedStatement 객체에 대한 설명으로 옳은 것은?
      • 객체를 생성할 때 SQL 구문을 지정해야 함
      • 같은 SQL 구문을 여러 번 실행할 때 효율적으로 활용될 수 있음
      • 매개 변수를 가지는 SQL 구문을 지정할 수 있음
  3. Statement 객체를 이용하여 executeQuery()를 호출하면 select 구문을 실행할 수 있다. 이때 질의를 만족하는 레코드들이 테이블 형태로 리턴되는데 이것의 데이터 타입은 무엇인가?

    a. ResultSet

[데이터베이스 시스템] 14강 - 동시성 제어

[파이썬 프로그래밍 기초] 14강 - 실전 프로그래밍