JDBC(Java Database Connectivity)是用於執行 SQL 語句的 Java API,由一組用 Java 編寫的類與接口組成。它為數據庫應用開發者、前台工具開發者提供統一標準接口,使開發者能用純 Java編寫完整數據庫應用,實現真正的「Write Once, Run Everywhere」。
ODBC(Open Database Connectivity):C 語言實現的標準數據訪問接口,四大組件:
| 維度 | ODBC | JDBC | RDO/ADO/OLE DB |
|---|---|---|---|
| 語言綁定 | C | Java | COM/Visual Basic |
| 面向對象 | 否 | 是 | 是(封裝層) |
| 指針操作 | 大量 | 無 | 封裝隱藏 |
| 學難度 | 高(簡繁混雜) | 低(簡單即簡單) | 中 |
| 部署模式 | 客戶機需裝驅動/管理器 | 純 Java 驅動可自動下載、跨平台 | Windows 綁定 |
| 本質關係 | 基於 X/OPEN SQL CLI | 基於 ODBC 設計特徵,強化 Java 風格 | ODBC「漂亮包裝」 |
Java Applet/應用 直接連接數據庫。需 JDBC 驅動直連 DB。Client/Server 結構,網絡可為 Intranet/Internet。
命令發送至中間層,中間層發 SQL 給數據庫,結果回傳中間層再返回用戶。
趨勢:中間層早期用 C/C++ 保性能,隨 Java 優化編譯器(JIT、AOT)成熟,Java 實現中間層日益主流。JDBC 是 Java 中間層訪問數據庫的關鍵。
jdbc:subprotocol:subname//host:port/dbname(如 jdbc:mysql://192.168.3.143:3306/zfvims)Class.forName("com.mysql.jdbc.Driver") 或系統屬性 jdbc.driversDriverManager.getConnection(url, user, pwd) → Connectionconn.createStatement() → Statement(靜態 SQL)或 PreparedStatement(動態參數化 SQL)executeQuery(sql) → ResultSet,游標遍歷 next()、getXxx()executeUpdate(sql) → 影響行數ResultSet → Statement → Connection 逆序關閉,必在 finally 塊public class JdbcDemo {
public static Connection getConnection() throws SQLException {
try { Class.forName("com.mysql.jdbc.Driver"); }
catch (ClassNotFoundException e) { throw new SQLException("驅動加載失敗", e); }
return DriverManager.getConnection(
"jdbc:mysql://192.168.3.143:3306/zfvims", "lavasoft", "password");
}
public static void queryProvinces() {
String sql = "SELECT code, name FROM province ORDER BY code";
try (Connection conn = getConnection();
Statement stmt = conn.createStatement(
ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
System.out.println(rs.getString("code") + " " + rs.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
setAutoCommit(false)、commit/rollback、finally 恢復 autoCommitJDBC 是 Java 數據訪問的基石與標準。從 ODBC 演進而來,保留 CLI 設計精華,注入 Java 面向對象、平台無關、安全健壯基因。無論上層框架如何演進(Hibernate、MyBatis、Spring Data、jOOQ),JDBC 核心模型(DriverManager → Connection → Statement → ResultSet)永不落伍。精通 JDBC,是精通所有 Java 數據訪問技術的前提。