{{위키데이터 속성 추적}}
{{소프트웨어 정보
|name = JDBC
|logo =
|caption =
|developer = 
|latest release version = JDBC 4.3
|latest release date = {{시작 날짜와 나이|2017|9|21}}
|latest preview version =
|latest preview date =
|operating system = [[크로스 플랫폼]]
|genre = 데이터 접근 API
|license =
|website = 
}}
'''JDBC'''(Java Database Connectivity)는 [[자바 (프로그래밍 언어)|자바]]에서 [[데이터베이스]]에 접속할 수 있도록 하는 [[자바 API]]이다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다.

== 역사 ==
썬 마이크로시스템즈는 1997년 2월 19일 JDBC를 [[JDK]] 1.1의 일부로 출시하였다.<ref>
{{웹 인용
 |url          = http://www.sun.com/smi/Press/sunflash/1997-02/sunflash.970219.0001.xml
 |제목       = Sun Ships JDK 1.1 -- Javabeans Included
 |date         = 1997-02-19
 |work         = www.sun.com
 |publisher    = [[Sun Microsystems]]
 |archiveurl   = https://web.archive.org/web/20080210044125/http://www.sun.com/smi/Press/sunflash/1997-02/sunflash.970219.0001.xml
 |archivedate  = 2008-02-10
 |accessdate   = 2010-02-15
 |quote        = February 19, 1997 - The JDK 1.1 [...] is now available [...]. This release of the JDK includes: [...] Robust new features including JDBC for database connectivity
 |url-status = live
}}
</ref> 그 뒤로 이제까지 [[자바 플랫폼, 스탠더드 에디션|자바 SE]]의 일부로 되고 있다.

JDBC 클래스는 [[자바 패키지]] java.sql과 javax.sql에 포함되어 있다.

버전 3.1을 기점으로 JDBC는 [[자바 커뮤니티 프로세스]]를 통해 개발되고 있다. JSR 54는 JDBC 3.0을 규정(J2SE 1.4에 포함됨)하고, JSR 114는 JDBC Rowset addition을 규정하며, JSR 221은 JDBC 4.0의 사양(자바 SE 6에 포함됨)이다.<ref>[http://java.sun.com/products/jdbc/download.html#corespec40 JDBC API Specification Version: 4.0].</ref>

JDBC 4.1은 JSR 221의 유지보수판 1에 규정되어 있고<ref>[http://jcp.org/aboutJava/communityprocess/mrel/jsr221/index.html JSR-000221 JDBC API Specification 4.1 (Maintenance Release 1)]</ref>, 자바 SE 7에 포함되어 있다.<ref>http://docs.oracle.com/javase/7/docs/technotes/guides/jdbc/jdbc_41.html</ref>

최신 버전은 JDBC 4.2는 JSR 221의 유지보수판 2에 규정되어 있고<ref>[https://jcp.org/aboutJava/communityprocess/mrel/jsr221/index2.html JSR-000221 JDBC API Specification 4.2 (Maintenance Release 2)]</ref>, 자바 SE 8에 포함되어 있다.<ref>http://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/jdbc_42.html</ref>

{| class="wikitable"
|+ JDBC API 역사
! JDBC  버전 !! 발표 !! 자바 플랫폼!! 중요한 변화
|-
| JDBC 4.0 || ||  JavaEE 6 예정 || [[JSR]] 221
|-
| JDBC 3.0 ||  ||  JavaEE 5 || [[JSR]] 54
|-
| JDBC 2.0 || ||  ||
|-
| JDBC 1.0 || || J2SE 1.1 ||        
|}

== 기능 ==
{| class="wikitable"
|+ 자바가 지원하는 호스트 데이터베이스 타입
|-
! 오라클 자료형
! <code>setXXX()</code> 메소드
|-
| CHAR
| <code>setString()</code>
|-
| VARCHAR2
| <code>setString()</code>
|-
|rowspan="8"| NUMBER
| <code>setBigDecimal()</code>
|-
| <code>setBoolean()</code>
|-
| <code>setByte()</code>
|-
| <code>setShort()</code>
|-
| <code>setInt()</code>
|-
| <code>setLong()</code>
|-
| <code>setFloat()</code>
|-
| <code>setDouble()</code>
|-
| INTEGER
| <code>setInt()</code>
|-
| FLOAT
| <code>setDouble()</code>
|-
| CLOB
| <code>setClob()</code>
|-
| BLOB
| <code>setBlob()</code>
|-
| RAW
| <code>setBytes()</code>
|-
| LONGRAW
| <code>setBytes()</code>
|-
|rowspan="3"| DATE
| <code>setDate()</code>
|-
| <code>setTime()</code>
|-
| <code>setTimestamp()</code>
|}

== 예제 ==
자바 애플리케이션이 데이터베이스 연결이 필요할 때 <code>DriverManager.getConnection()</code> 메소드들 가운데 하나를 사용하여 JDBC 연결을 만들게 된다. 사용된 URL은 특정 데이터베이스와 JDBC 드라이버에 의존한다. "jdbc:" 프로토콜로 무조건 시작하지만 나머지 부분은 특정 벤더에 따라 다르다.

<syntaxhighlight lang=java5>
Connection conn = DriverManager.getConnection(
     "jdbc:somejdbcvendor:other data needed by some jdbc vendor",
     "myLogin",
     "myPassword" );
try {
     /* you use the connection here */
} finally {
    //It's important to close the connection when you are done with it
    try { conn.close(); } catch (Throwable e) { /* Propagate the original exception
instead of this one that you want just logged */ logger.warn("Could not close JDBC Connection",e); }
}
</syntaxhighlight>

자바 SE 7을 기점으로 자바의 [http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html try-with-resources] 문을 사용하여 위의 코드를 더 깔끔하게 정리할 수 있다:
<syntaxhighlight lang=java5>
try (Connection conn = DriverManager.getConnection(
     "jdbc:somejdbcvendor:other data needed by some jdbc vendor",
     "myLogin",
     "myPassword" ) ) {
     /* you use the connection here */
}  // the VM will take care of closing the connection
</syntaxhighlight>

연결이 확립되면 다음과 같은 문을 작성할 수 있다.

<syntaxhighlight lang=java5>
try (Statement stmt = conn.createStatement()) {
    stmt.executeUpdate( "INSERT INTO MyTable( name ) VALUES ( 'my name' ) " );
}
</syntaxhighlight>

== JDBC 드라이버 ==
{{본문|JDBC 드라이버}}
JDBC 드라이버들은 자바 프로그램의 요청을 DBMS가 이해할 수 있는 프로토콜로 변환해주는 클라이언트 사이드 [[어댑터 패턴|어댑터]]이다. (서버가 아닌 클라이언트 머신에 설치)

=== 타입 ===
상용 및 자유 드라이버들은 대부분의 관계형 데이터베이스 서버로의 연결을 제공한다. 이 드라이버들은 다음의 타입 중 하나에 속한다:
* 타입 1: 로컬에서 사용 가능한 ODBC 드라이버의 네이티브 코드를 호출한다.
* 타입 2: 클라이언트 사이드의 데이터베이스 벤더 네이티브 라이브리를 호출한다. 그러면 이 코드는 네트워크 상의 데이터베이스와 통신하게 된다.
* 타입 3: 서버 사이드 미들웨어와 통신하는 순수 자바 드라이버로서, 이후에 데이터베이스와 통신한다.
* 타입 4: 데이터베이스 네이티브 프로토콜을 사용하는 순수 자바 드라이버이다.

== 같이 보기 ==
* [[ODBC]]

== 각주 ==
{{각주}}

== 외부 링크 ==
{{위키공용분류}}
* {{Javadoc:SE-guide|jdbc|JDBC API Guide}} This documentation has examples where the JDBC resources are not closed appropriately (swallowing primary exceptions and being able to cause NullPointerExceptions) and has code prone to [[SQL 인젝션|SQL injection]]
* {{Javadoc:SE|package=java.sql|java/sql}} API [[Javadoc]] documentation
* {{Javadoc:SE|package=javax.sql|javax/sql}} API Javadoc documentation

{{전거 통제}}

[[분류:자바 플랫폼, 스탠더드 에디션]]
[[분류:자바 플랫폼]]
[[분류:자바 API]]
[[분류:데이터베이스 API]]
[[분류:자바 사양 요청]]