본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

JDBC(Java Database Connectivity)는 자바 프로그램이 데이터베이스 종류에 상관없이 같은 API 로 연결을 맺고 SQL 을 실행해 결과를 받도록 정한 자바 표준 API(java.sql, javax.sql 패키지)이다.

JDBC 는 응용 프로그램이 쓰는 인터페이스(Connection, Statement, PreparedStatement, ResultSet 등)와, 데이터베이스 회사가 그 인터페이스를 구현해 제공하는 JDBC 드라이버로 나뉜다. 응용 프로그램은 인터페이스만 보고 코드를 쓰고, 실제로 데이터베이스와 통신하는 일은 드라이버가 맡는다. 그래서 드라이버만 바꾸면 같은 코드로 다른 DBMS 에 붙을 수 있다. 마이크로소프트 계열에서 같은 역할을 하는 것이 ODBC 이다.

데이터 원본과 연결할 때는 보통 DriverManager 클래스나 DataSource 인터페이스를 쓴다. DriverManager 는 데이터베이스 URL 로 지정한 데이터 원본에 응용 프로그램을 연결해 주며, 처음 연결을 시도할 때 클래스 경로에 있는 JDBC 4.0 이상 드라이버를 자동으로 적재한다. 4.0 이전 드라이버는 응용 프로그램이 Class.forName(...) 으로 직접 적재해야 했다.[1]

Connection con = DriverManager.getConnection(url, user, pw);   // ① ② ③
PreparedStatement ps = con.prepareStatement(
        "SELECT name FROM emp WHERE deptno = ?");                // ④
ps.setInt(1, 10);
ResultSet rs = ps.executeQuery();                                // ⑤
while (rs.next()) { System.out.println(rs.getString("name")); }  // ⑥
rs.close(); ps.close(); con.close();                             // ⑦
  1. 응용 프로그램이 DriverManager.getConnection() 을 호출한다
  2. DriverManager 가 등록된 드라이버 가운데 그 URL 을 처리할 수 있는 드라이버를 골라 연결을 맡긴다. getConnection 이 불리면 DriverManager 는 초기화 때 적재된 드라이버와 명시적으로 적재된 드라이버 중에서 알맞은 것을 찾는다[2]
  3. 드라이버가 DBMS 와 네트워크 소켓 연결을 맺고 인증을 거쳐 Connection 객체를 돌려준다
  4. 연결에서 Statement 나 PreparedStatement 객체를 만든다
  5. executeQuery·executeUpdate 를 부르면 드라이버가 SQL 을 보내고 DBMS 가 SQL 을 실행한다
  6. 조회 결과는 ResultSet 으로 받아 한 행씩 읽는다
  7. 다 쓴 객체는 닫는다(try-with-resources 를 쓰면 자동으로 닫힌다)

연결이 먼저 있어야 Statement 를 만들 수 있고, Statement 가 있어야 SQL 을 실행할 수 있다. 그래서 getConnection 호출 → 드라이버 선택 → 소켓 연결 → Statement 생성 → SQL 실행 순서는 바뀌지 않는다.

주요 인터페이스

편집 원본 편집
이름 역할
DriverManager 등록된 드라이버를 관리하고 URL 에 맞는 드라이버로 연결을 만든다
Driver DBMS 회사가 구현한 드라이버. URL 을 받아 실제 연결을 맺는다
Connection 데이터베이스와의 세션. 트랜잭션(commit, rollback, setAutoCommit)을 다룬다
Statement 완성된 SQL 문자열을 실행한다
PreparedStatement ? 자리표시자를 둔 SQL 을 미리 컴파일하고 값만 바꿔 실행한다. SQL 삽입 공격을 막는다
CallableStatement 저장 프로시저를 호출한다
ResultSet 조회 결과 행 집합. next() 로 커서를 옮긴다
DataSource 연결 정보를 감추고 커넥션 풀을 쓰게 하는 연결 공급자. 서버 환경에서는 DriverManager 보다 권장된다[1]

Statement 와 PreparedStatement 구별하기

편집 원본 편집
구분 Statement PreparedStatement
SQL 작성 값까지 문자열로 이어 붙임 ? 자리에 값을 따로 바인딩
컴파일 실행할 때마다 한 번 준비해 여러 번 실행
SQL 삽입 취약하다 값이 데이터로만 전달되어 막힌다
  1. ↑ 1.0 1.1 「Establishing a Connection」, The Java Tutorials, Oracle, https://docs.oracle.com/javase/tutorial/jdbc/basics/connecting.html, 확인일: 2026-11-04.
  2. ↑ 「Class DriverManager」, Java SE 21 API Specification, Oracle, https://docs.oracle.com/en/java/javase/21/docs/api/java.sql/java/sql/DriverManager.html, 확인일: 2026-11-04.