JDBC(Java Database Connectivity)是 Java 應用程式存取關聯式資料庫的標準 API。本文將從歷史演進、核心架構、與 ODBC 比較、兩層/三層模型等維度,系統梳理 JDBC 技術脈絡,協助開發者建立完整知識體系。
ODBC(Open Database Connectivity)是 Microsoft 在 1990 年代推出的 C 語言資料庫存取介面,包含四大核心元件:
Java 1.0 釋出後,開發者被迫透過 JNI 呼叫 C 版 ODBC,導致:
Sun 於 JDK 1.1 正式納入 java.sql 套件,確立 JDBC 為 Java 標準持久層 API。
JDBC 負責三項核心工作:
定位上,JDBC 屬於低階 API,直接對應 SQL 指令。上層框架(如 JPA/Hibernate、MyBatis、Spring JDBC Template)皆建構於 JDBC 之上,最終皆轉譯為 JDBC 呼叫。
| 維度 | ODBC | JDBC |
|---|---|---|
| 實作語言 | C(原生指標、手動記憶體管理) | Java(物件導向、GC、型別安全) |
| 部署模式 | 客戶端需安裝驅動程式 + 驅動管理器 | 純 Java 驅動可隨應用程式自動下載(JAR) |
| API 風格 | 函式式、參數複雜、簡易/進階混雜 | 物件導向、簡單事物簡單化、支援進階功能 |
| 平台相容 | 需各平台編譯原生庫 | Write Once, Run Anywhere |
JDBC-ODBC Bridge(JDK 8 移除)曾作為過渡方案,但生產環境強烈建議使用純 Java Type 4 驅動程式。
Java 應用程式/Applet 直接連接資料庫,適用於簡單內部系統。缺點:商業邏輯分散於客戶端,維護困難,資料庫連線數易耗盡。
客戶端 → 中介層 → 資料庫
DriverManager / DataSource:連線取得Connection:會話與事務控制Statement / PreparedStatement / CallableStatement:SQL 執行ResultSet:結果集游標操作DatabaseMetaData / ParameterMetaData:中繼資料檢視PreparedStatement 防 SQL 注入並啟用查詢計畫快取addBatch/executeBatch)提升大量寫入效能fetchSize)JDBC 是 Java 資料存取的基石。理解其歷史演進、架構定位、驅動類型與架構模型,有助於在選型 ORM 框架、排查效能瓶頸、設計微服務資料層時做出更理性的決策。