Sun 定義的四種標準
| 類型 | 名稱 | 架構圖 | 核心特點 |
| Type 1 | JDBC-ODBC Bridge | App → JDBC-ODBC Bridge → ODBC Driver → DB | JDK 內建、無需廠商驅動、性能差、已移除 (JDK 8+) |
| Type 2 | Native API | App → JDBC Driver → Native Client Lib → DB | 需安裝客戶端庫、較 Type 1 快、平台相關、部署麻煩 |
| Type 3 | Network Protocol | App → JDBC Driver → Middleware Server → DB | 純 Java、中間件轉發、支援多種 DB、彈性高、增加網絡跳數 |
| Type 4 | Thin Driver (Pure Java) | App → JDBC Driver → DB Protocol → DB | 純 Java、直連 DB、無客戶端、性能最佳、部署最簡、主流選擇 |
深度對比
Type 1:歷史產物
- 實現:
sun.jdbc.odbc.JdbcOdbcDriver
- 優點:零成本連接 Access、Excel、舊版 SQL Server 等無原生驅動的數據源。
- 缺點:ODBC 層轉換開銷大、線程安全差、JDK 8 起完全移除。
- 替代:UCanAccess (Access)、Apache POI (Excel)、遷移至正規 DB。
Type 2:過渡方案
- 代表:Oracle OCI Driver (ojdbc14/ojdbc8)、DB2 CLI Driver、Sybase jConnect。
- 本地庫載入:
System.loadLibrary("ocijdbc11"),需配置 java.library.path 或 LD_LIBRARY_PATH。
- 缺點:客戶端版本與服務端強綁定、容器化部署極其痛苦、記憶體洩漏風險。
- 現狀:廠商已停止更新,建議遷移至 Type 4。
Type 3:中間件架構
- 代表:DataDirect SequeLink、IDA Server、早期 WebLogic jDriver。
- 架構:
App → Type3 Driver (純 Java) → Middleware (Socket/RMI/HTTP) → Type 2/4 Driver → DB
- 優點:客戶端零配置、防火牆友好、統一連接池/監控/審計、支援異構 DB。
- 缺點:中間件成單點故障、延遲增加、授權成本高。
- 現代演變:Database Proxy (ProxySQL、Heimdall、MaxScale) 實現類似功能但更輕量。
Type 4:行業標準
- 代表:MySQL Connector/J、PostgreSQL JDBC、Oracle Thin (ojdbc8)、Microsoft JDBC Driver for SQL Server、MariaDB Java Client。
- 實現:完全用 Java 實現數據庫網絡協議(MySQL 二進制協議、PostgreSQL 前端/後端協議、TDS 等)。
- 優點:單 JAR 部署、跨平台、連接池友好、支援 TLS/SNI/負載均衡、GraalVM 原生映像兼容。
- 版本選擇:務必匹配數據庫大版本(如 MySQL 8.0 用 8.0.x 驅動),避免協議不兼容。
實戰選型決策樹
START
│
├─ 是否為舊系統維護、無法升級 DB、無原生驅動?
│ ├─ 是 → 評估遷移成本,臨時用 Type 1/2,制定遷移計劃
│ └─ 否 → 下一步
│
├─ 是否需要統一異構 DB 接入、審計、防火牆穿透?
│ ├─ 是 → 考慮 Database Proxy (Type 3 現代形態) + Type 4 後端
│ └─ 否 → 下一步
│
└─ 直接使用目標 DB 官方/社區維護的 Type 4 驅動
│
├─ Maven 坐標:mysql:mysql-connector-java:8.0.33
├─ 連接池:HikariCP (Spring Boot 默認)
└─ 參數優化:useSSL=false, serverTimezone=UTC, rewriteBatchedStatements=true
END
進階:驅動級優化參數
| 驅動 | 關鍵參數 | 作用 |
| MySQL | rewriteBatchedStatements=true | 批次 INSERT 重寫為多值 INSERT,提升 10-100x |
| PostgreSQL | reWriteBatchedInserts=true | 同理 |
| Oracle | oracle.jdbc.defaultRowPrefetch=100 | 預取行數減少網絡交互 |
| SQL Server | sendStringParametersAsUnicode=false | 非 Unicode 字串避免轉換開銷 |
總結
現代 Java 應用默認選 Type 4 純 Java 驅動。理解四種類型演進歷史,有助於維護舊系統、設計異構數據接入架構、排查驅動級性能問題。新專案請直接引入目標數據庫官方最新 Type 4 驅動,配合 HikariCP 連接池,啟用批次重寫等關鍵參數。