首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JDBC 核心架構與實戰全解析:從驅動選型到事務控制

     編輯:Java 相關知識

JDBC 概述

JDBC (Java Database Connectivity) 是 Java 應用訪問關係型數據庫的標準 API,同時為驅動廠商定義了服務提供者接口 (SPI)。核心目標:統一接口、跨數據庫、高性能、強類型。

驅動類型選型指南

類型原理適用場景代表
Type 1: JDBC-ODBC BridgeJDBC → ODBC → DB企業內網、過渡方案Sun JDBC-ODBC Bridge
Type 2: Native APIJDBC → Client Lib (OCI/DB2 CLI)需安裝客戶端庫的環境Oracle OCI Driver
Type 3: Network Pure JavaJDBC → Middleware Server → DB多數據庫、三層架構、AppletWebLogic, DataDirect
Type 4: Native Protocol Pure JavaJDBC → DB Native Protocol (TCP)互聯網/內網、無客戶端安裝、首選MySQL Connector/J, PostgreSQL JDBC, Oracle Thin

趨勢:Type 3/4 為主流,Type 1/2 逐漸淘汰。Type 4 無中間層、純 Java、自動下載 (Applet/WebStart)、性能最佳。

建立連接核心步驟

// 1. 載入驅動 (JDBC 4.0+ 可省略,SPI 自動發現)
Class.forName("com.mysql.cj.jdbc.Driver");

// 2. 獲取連接
String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC";
Connection conn = DriverManager.getConnection(url, "user", "pass");

JDBC URL 結構

jdbc::
// 例
jdbc:mysql://host:port/dbname?param=value
jdbc:oracle:thin:@host:port:sid
jdbc:postgresql://host:port/dbname
  • jdbc 固定協議。
  • subprotocol:驅動名/連接機制 (如 mysql, oracle:thin)。
  • subname:定位數據庫的具體標識 (主機、端口、實例名、屬性)。

發送 SQL 的三大接口

接口創建方法適用場景特點
StatementcreateStatement()靜態 SQL、無參數簡單、每次編譯
PreparedStatementprepareStatement(sql)參數化 SQL、高頻執行預編譯、防注入、性能優
CallableStatementprepareCall(sql)調用存儲過程支援 OUT/INOUT 參數

事務管理

  • 默認 自動提交:每條 SQL 獨立事務。
  • conn.setAutoCommit(false) 開啟手動事務:commit() 提交 / rollback() 回滾。
  • 事務隔離級別 (由 DB 支持程度決定):
    READ_UNCOMMITTED (髒讀)
    READ_COMMITTED (不可重複讀)
    REPEATABLE_READ (幻讀)
    SERIALIZABLE (完全串行化)
    隔離級別越高,併發性越低,性能越差,需權衡。

DriverManager 內幕

  • 驅動註冊:Class.forName() 載入驅動類 → 靜態塊創建實例 → DriverManager.registerDriver()。
  • 連接建立:遍歷已註冊驅動,調用 driver.connect(url, props),首個成功者勝出。
  • 安全性:類加載器隔離,僅使用請求代碼同源或本地文件系統的驅動。

ResultSet 處理與資源關閉

  • executeQuery() 返回 ResultSet,游標前移 next(),getXxx() 取值。
  • 必須顯式關閉:ResultSet → Statement → Connection (逆序),或使用 try-with-resources (JDK 7+)。
  • execute() 處理多結果集/更新計數混合場景,配合 getResultSet()/getUpdateCount()/getMoreResults() 輪詢。

最佳實踐清單

  1. 優先使用 Type 4 驅動,連接池 (HikariCP/Druid) 管理連接生命週期。
  2. 所有業務 SQL 使用 PreparedStatement 防注入、利用預編譯緩存。
  3. 事務邊界在 Service 層聲明式控制 (Spring @Transactional)。
  4. 大數據量分批提交、流式讀取 (setFetchSize) 避免 OOM。
  5. 異常處理:捕獲 SQLException,記錄 SQLState/ErrorCode,轉換為業務異常拋出。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved