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

김찬미·2025년 5월 30일

14강 - JDBC 프로그래밍

  • JDBC와 MariaDB
  • MariaDB 서버에 연결하기
  • MariaDB 연동 프로그래밍
  • DatabaseMetaData 객체, PreparedStatement 객체, ResultSetMetaData 객체

JDBC와 MariaDB

💡 JDBC(Java DataBase Connectivity) API

  • Java 프로그램에서 관계형 DBMS와 연동하여 데이터를 사용하고 관리할 수 있게 하는 Java API 표준 규격
  • JDK의 일부로 포함되어 있음(java.sql 패키지)

JDBC 드라이버

  • JDBC API는 DBMS의 제조사가 제공하는 JDBC 드라이버를 통해 구현
  • 사용하려는 DBMS의 JDBC 드라이버를 다운로드 받아 설치

✔️ JDBC API를 사용한 데이터베이스 연동 프로그램 실행 가능

MariaDB JDBC 드라이버

MariaDB용 JDBC API를 구현한 소프트웨어

  • .jar 파일 형식으로 제공

  • Java 8+ Connector를 통해 Java 프로그램과 MariaDB 연동


MariaDB 연동 프로그래밍

🔁 기본 동작 방식

1. JDBC 패키지를 import

import java.sql.*;

2. JDBC 드라이버를 동적으로 로드

Class.forName("org.mariadb.jdbc.Driver"); // 호출
// 최신 JDBC 버전에서는 *생략 가능*

3. MariaDB 서버 프로그램과 연결 설정

DriverManager.getConnection(url, user, pass) // 호출

4. SQL 구문의 실행과 결과 처리

  • Conection, Statement, ResultSet 객체 사용

5. 연결 해제

  • 사용중인 데이터베이스 자원 반납
// finally 블록에서 실행
rs.close(); stmt.close(); con.close();
// try-with-resource 구문을 사용하면 이 부분이 *자동 처리*됨

MariaDB 서버에 연결하기

DriverManager.getConnceciton(url, user, pass)

위 메서드는 URL, 사용자 아이디, 비밀번호를 이용하여 서버에 접근을 시도

→ 성공하면 Connection 유형의 객체를 리턴

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 execute(String sql)SQL 구문을 실행하며, select 구문인 경우 true를 반환하고 getResultSet()을 호출할 수 있음. update/insert/delete 구문의 경우 false를 반환하며 getUpdateCount()를 호출할 수 있음
ResultSet getResultSet()SQL 구문(select)을 실행한 결과를 ResultSet 객체로 반환
int getUpdateCount()select 구문을 제외한 SQL 실행 결과로 영향을 받은 행의 개수를 반환
ResultSet executeQuery(String sql)select 구문을 실행할 때 사용되며, 실행 결과로 테이블 형태ResultSet 객체를 반환
int executeUpdate(String sql)update, insert, delete 구문을 실행할 때 사용되며, 영향받은 행의 개수를 반환

Statement 객체로 select 구문 실행하기

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


ResultSet 객체

select 구문의 실행 결과를 나타내는 테이블

  • Statement 객체의 getResultSet(), executeQuery() 메소드가 리턴하는 객체

  • 테이블에서 한 행을 가리키는 커서를 가짐

  • select 구문을 실행하여 ResultSet 객체가 생성
    커서가 생성되고, select 구문의 실행 결과를 가리킴

    • 커서는 행을 가리키는 포인터, 기본적으로 위에서 아래로 진행
    • 커서의 초기값은 첫 행의 직전 행을 가리킴

🔹주요 메소드

메서드설명
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, upadte, delete 구문 실행하기

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


DatabaseMetaData 객체, PreparedStatement 객체, ResultSetMetaData 객체

1) DatabaseMetaData 객체

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

🔹주요 메소드

메서드설명
String getDriverName()JDBC 드라이버 이름을 리턴
String getURL()연결에 사용된 DBMS URL을 리턴
String getUserName()연결에 사용된 데이터베이스 사용자
// DBMS 예시 알아내기

// 출력값: MariaDb Connecor/J
System.out.println(conn.getMetaData().getDriverName());

// 출력값: 3.3.3
System.our.println(conn.getMetaData().getDriverVersion());

// 출력값: root
System.our.println(conn.getMetaData().getUserName());

DMBSJava의 자료형 변환

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


2) PreparedStatement 객체

Precompile된 SQL 문을 표현

  • 객체는 Connection 객체의 prepareStatement(String sql) 메소드를 통해 생성됨

  • 객체를 생성할 때 SQL 구문이 주어짐 (Statement 객체의 경우 실행할 때 제공)

  • 같은 SQL 문을 여러 번 반복 실행할 때 효율적
    SQL 문에 매개변수(?)를 사용하고, 실행 전에 값 지정 가능

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();

🔹주요 메소드

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

3) ResultSetMetaData 객체

ResultSet 객체에서 테이블의 이름, 열의 이름과 타입 정보를 얻을 때 사용되는 객체

  • ResultSet의 getMataData()로 생성함

🔹주요 메소드

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

profile
백엔드 지망 학부생

0개의 댓글