首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

JDBC 核心機制全解析:從 Driver 加載到 ResultSet 處理的完整流程

     編輯:MySQL 綜合教學

什麼是 JDBC?

JDBC (Java DataBase Connectivity) 是 Java 標準 API,提供統一介面訪問關係型數據庫。核心優勢:跨平台、安全、易用、支援動態下載驅動。

JDBC 能做什麼?

  1. 建立數據庫連接
  2. 發送 SQL 語句(DML/DDL/DCL)
  3. 處理結果集

架構分層

應用程序 → JDBC API (java.sql/javax.sql) → JDBC Driver Manager → 具體驅動實現 (廠商提供) → 數據庫
  • JDBC 定義介面(Driver, Connection, Statement, ResultSet...)
  • 數據庫廠商實現介面(如 com.mysql.jdbc.Driver)
  • 開發者調用介面,運行時動態綁定具體實現

五大核心步驟詳解

1. 加載驅動類 (Driver 介面)

Class.forName("com.mysql.jdbc.Driver"); // 註冊到 DriverManager

常見數據庫驅動類與 URL 格式:

數據庫驅動類URL 格式
MySQLcom.mysql.jdbc.Driverjdbc:mysql://host:3306/db?useUnicode=true&characterEncoding=UTF-8
Oracleoracle.jdbc.driver.OracleDriverjdbc:oracle:thin:@host:1521:db
SQL Server 2005+com.microsoft.sqlserver.jdbc.SQLServerDriverjdbc:sqlserver://host:1433;DatabaseName=db
PostgreSQLorg.postgresql.Driverjdbc:postgresql://host:5432/db
DB2com.ibm.db2.jcc.DB2Driverjdbc:db2://host:50000/db

2. 建立連接 (Connection 介面)

String url = "jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC";
String user = "root", pwd = "123456";
Connection conn = DriverManager.getConnection(url, user, pwd);

Connection 代表會話上下文,提供事務控制(commit()/rollback())、創建 Statement、設置隔離級別等。

3. 創建語句對象 (Statement 介面體系)

類型創建方法適用場景特點
Statementconn.createStatement()靜態 SQL、無參數每次編譯執行,效率較低
PreparedStatementconn.prepareStatement(sql)參數化 SQL、批量執行預編譯、防注入、可重用執行計劃、效率高
CallableStatementconn.prepareCall("{call proc(?)}")調用存儲過程支援 OUT/INOUT 參數

三大執行方法:

  • executeQuery(sql) → 返回 ResultSet (SELECT)
  • executeUpdate(sql) → 返回影響行數 (INSERT/UPDATE/DELETE/DDL)
  • execute(sql) → 返回 boolean,適用於任意 SQL 或多結果集

4. 處理結果集 (ResultSet 介面)

ResultSet rs = stmt.executeQuery("SELECT id, name FROM users");
while (rs.next()) {
  int id = rs.getInt("id");
  String name = rs.getString("name");
  // 也可用列索引 rs.getInt(1)
}
rs.close();

游標默認前向只讀,可創建可滾動/可更新結果集:createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE)。

5. 關閉資源 (逆序關閉)

finally {
  if (rs != null) try { rs.close(); } catch (SQLException e) { e.printStackTrace(); }
  if (stmt != null) try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); }
  if (conn != null) try { conn.close(); } catch (SQLException e) { e.printStackTrace(); }
}

Java 7+ 推薦 try-with-resources 自動關閉:

try (Connection conn = DriverManager.getConnection(url, user, pwd);
     PreparedStatement ps = conn.prepareStatement(sql);
     ResultSet rs = ps.executeQuery()) {
  // 處理結果
}

最佳實踐總結

  1. 生產環境必須使用連接池(HikariCP/Druid/DBCP),避免頻繁創建銷毀連接。
  2. 全部參數化查詢使用 PreparedStatement,防 SQL 注入、利用緩存計劃。
  3. 大數據量分頁採用「延遲關聯」或「游標分頁」,避免 LIMIT offset, size 深分頁性能崩塌。
  4. 事務邊界盡量縮小,業務邏輯與數據庫操作分離。
  5. 異常處理:捕獲 SQLException,記錄 SQL 狀態碼 (e.getSQLState()) 與廠商錯誤碼 (e.getErrorCode())。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved