자바 애플리케이션과 **관계형 데이터베이스(MySQL, Oracle, SQLite)**를 연동하여 데이터를 영구 저장하고 조작하는 JDBC(Java Database Connectivity) 기술을 다룹니다.
1. JDBC 연동 용어 사전 (Glossary)
- JDBC (Java Database Connectivity): 자바 언어로 RDBMS 데이터베이스에 접속하여 SQL 문을 실행하도록 돕는 표준 API 인터페이스입니다.
- DriverManager: 데이터베이스 드라이버를 관리하고 DB와의 세션 연결 자원인
Connection객체를 생성해 주는 클래스입니다. - PreparedStatement: SQL 쿼리 뼈대를 미리 컴파일하고 파라미터만 바인딩하여 실행하는 객체로, SQL Injection 공격을 완벽 차단합니다.
- ResultSet:
SELECT쿼리 실행 결과로 반환된 테이블 형태의 데이터 행(Row)들을 조회하는 커서 객체입니다.
2. JDBC DB 연결 및 SQL CRUD 실행 예제
import java.sql.*;
public class JdbcCrudMain {
private static final String URL = "jdbc:sqlite:student.db"; // DB URL
public static void main(String[] args) {
String insertSql = "INSERT INTO students (name, score) VALUES (?, ?)";
String selectSql = "SELECT * FROM students";
try (Connection conn = DriverManager.getConnection(URL)) {
System.out.println("데이터베이스 연결 성공!");
// 1. 데이터 추가 (Create)
try (PreparedStatement pstmt = conn.prepareStatement(insertSql)) {
pstmt.setString(1, "홍길동");
pstmt.setInt(2, 95);
pstmt.executeUpdate();
System.out.println("학생 데이터 등록 성공.");
}
// 2. 데이터 조회 (Read)
try (PreparedStatement pstmt = conn.prepareStatement(selectSql);
ResultSet rs = pstmt.executeQuery()) {
while (rs.next()) {
System.out.println("ID: " + rs.getInt("id") +
" | 이름: " + rs.getString("name") +
" | 점수: " + rs.getInt("score"));
}
}
} catch (SQLException e) {
System.err.println("DB 작업 에러: " + e.getMessage());
}
}
}
3. 자주 묻는 질문 (Q&A)
Q. executeUpdate()와 executeQuery() 메소드의 차이는?
A. executeUpdate()는 INSERT, UPDATE, DELETE 처럼 DB 내용을 변경하는 쿼리에 쓰이며 영향받은 행(Row)의 개수를 반환합니다. 반면 executeQuery()는 SELECT 쿼리에 쓰이며 ResultSet 결과 객체를 반환합니다.