JDBC 프로그래밍JDBC와 MariaDB💡 JDBC(Java DataBase Connectivity) API
- Java 프로그램에서 관계형 DBMS와 연동하여 데이터를 사용하고 관리할 수 있게 하는 Java API 표준 규격
- JDK의 일부로 포함되어 있음(
java.sql패키지)
JDBC 드라이버✔️ JDBC API를 사용한 데이터베이스 연동 프로그램 실행 가능
MariaDB JDBC 드라이버MariaDB용 JDBC API를 구현한 소프트웨어
.jar 파일 형식으로 제공
Java 8+ Connector를 통해 Java 프로그램과 MariaDB 연동
MariaDB 연동 프로그래밍import java.sql.*;
Class.forName("org.mariadb.jdbc.Driver"); // 호출
// 최신 JDBC 버전에서는 *생략 가능*
DriverManager.getConnection(url, user, pass) // 호출
Conection, Statement, ResultSet 객체 사용// 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 객체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());
DMBS와 Java의 자료형 변환DBMS 테이블에서 필드의 자료형과 Java의 자료형, 그리고 JDBC 메소드 간의 관계

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 구문의 매개변수(?)에 문자열 값을 지정 |
ResultSetMetaData 객체
ResultSet객체에서 테이블의 이름, 열의 이름과 타입 정보를 얻을 때 사용되는 객체
- ResultSet의
getMataData()로 생성함
| 메서드 | 설명 |
|---|---|
String getColumnName(int index) | index 위치의 컬럼 이름을 리턴 |
int getColumnCount() | ResultSet의 컬럼 개수를 리턴 |
int getColumnType(int index) | index 위치의 컬럼 자료형을 리턴 |
String getTableName(int index) | index 위치의 컬럼을 포함하는 테이블의 이름을 리턴 |