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

JDBC 數據庫連接大全:主流數據庫驅動類與 URL 範本速查表

     編輯:Java 相關知識

前言

JDBC (Java Database Connectivity) 定義了統一的數據庫訪問 API,屏蔽底層驅動差異。本文彙整主流數據庫的驅動類全名、JDBC URL 格式、連接代碼範本,並說明關鍵參數含義,方便開發者快速查閱複製。

統一連接模式

// 1. 載入驅動 (JDBC 4.0+ 可省略,自動發現 META-INF/services/java.sql.Driver)
Class.forName(driverClassName);

// 2. 建立連接
Connection conn = DriverManager.getConnection(url, username, password);

// 3. 使用連接...
try (Statement stmt = conn.createStatement();
     ResultSet rs = stmt.executeQuery("SELECT * FROM users")) {
    while (rs.next()) { /* 處理結果 */ }
}

// 4. 關閉連接 (建議使用 try-with-resources 自動管理)

主流數據庫連接參數速查表

數據庫驅動類全名JDBC URL 範本關鍵參數說明備註
MySQL (5.7/8.0) com.mysql.cj.jdbc.Driver jdbc:mysql://host:port/dbname?useSSL=false&serverTimezone=UTC&characterEncoding=utf8 host: IP/域名
port: 預設 3306
dbname: 數據庫名
useSSL: 是否啟用 SSL
serverTimezone: 時區 (8.0 必須)
characterEncoding: 字符集
8.0+ 驅動包名變更為 com.mysql.cj,需注意時區設置
PostgreSQL org.postgresql.Driver jdbc:postgresql://host:port/dbname?currentSchema=public port: 預設 5432
currentSchema: 預設 schema
支援 IPv6、Unix Socket、SSL 模式
Oracle (Thin 模式) oracle.jdbc.OracleDriver jdbc:oracle:thin:@//host:port/serviceName
或 jdbc:oracle:thin:@host:port:SID
serviceName: 服務名 (推薦)
SID: 實例識別符 (舊版)
port: 預設 1521
Thin 驅動純 Java,無需 Oracle Client;支援 TNSNAMES、LDAP、RAC
SQL Server (Microsoft 官方驅動) com.microsoft.sqlserver.jdbc.SQLServerDriver jdbc:sqlserver://host:port;databaseName=dbname;encrypt=true;trustServerCertificate=false port: 預設 1433
databaseName: 數據庫名
encrypt: 加密連接
trustServerCertificate: 信任憑證
舊版 com.microsoft.jdbc.sqlserver.SQLServerDriver 已棄用
DB2 (IBM) com.ibm.db2.jcc.DB2Driver jdbc:db2://host:port/dbname:retrieveMessagesFromServerOnGetMessage=true; port: 預設 50000
retrieveMessagesFromServerOnGetMessage: 獲取詳細錯誤
需 db2jcc4.jar + db2jcc_license_cu.jar
Sybase ASE com.sybase.jdbc4.jdbc.SybDriver jdbc:sybase:Tds:host:port/dbname port: 預設 5000
Tds: Tabular Data Stream 協議
jConnect 驅動需授權
Informix com.informix.jdbc.IfxDriver jdbc:informix-sqli://host:port/dbname:INFORMIXSERVER=servername INFORMIXSERVER: 伺服器名稱 支援 DRDA 協議
SQLite (Xerial) org.sqlite.JDBC jdbc:sqlite:/path/to/dbfile.db
或 jdbc:sqlite::memory: (記憶體庫)
無需伺服器,直接操作檔案 嵌入式應用首選,支援加密擴展
H2 (嵌入/伺服器) org.h2.Driver jdbc:h2:~/test (嵌入)
jdbc:h2:tcp://host:port/~/test (伺服器)
純 Java、支援 PostgreSQL/MySQL 相容模式 測試、輕量應用、內存數據庫首選
JDBC-ODBC Bridge (JDK 8 移除) sun.jdbc.odbc.JdbcOdbcDriver jdbc:odbc:dsnName dsnName: 系統 DSN 名稱 已淘汰,請改用原生驅動

進階連接配置最佳實踐

1. 連接池配置 (HikariCP 範例)

HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/myapp?useSSL=false&serverTimezone=UTC");
config.setUsername("user");
config.setPassword("pass");
config.setMaximumPoolSize(20);
config.setMinimumIdle(5);
config.setConnectionTimeout(30000);      // 30秒獲取連接超時
config.setIdleTimeout(600000);           // 10分鐘空閒回收
config.setMaxLifetime(1800000);          // 30分鐘最大存活
config.setConnectionTestQuery("SELECT 1"); // 連接驗證查詢
config.setPoolName("MyApp-Pool");

HikariDataSource dataSource = new HikariDataSource(config);
// 使用: try (Connection conn = dataSource.getConnection()) { ... }

2. 連接參數安全性

  • 不要硬編碼密碼:使用環境變數、配置中心 (Nacos/Apollo)、密碼管理器 (Vault)
  • 啟用 SSL/TLS:生產環境強制加密傳輸 (useSSL=true, encrypt=true)
  • 驗證伺服器憑證:trustServerCertificate=false (生產) / true (測試自簽憑證)
  • 最小權限原則:應用賬號僅擁有必要表的增刪改查權限

3. 常見連接問題排查

錯誤現象可能原因解決方案
ClassNotFoundException驅動 JAR 未在 classpathMaven/Gradle 正確引入依賴
Communications link failure網路不通/防火牆/主機名解析失敗ping/telnet 測試、檢查 bind-address、使用 IP 代替主機名
Access denied for user用戶名/密碼錯誤/主機限制確認權限:GRANT ALL ON db.* TO 'user'@'%' IDENTIFIED BY 'pass'
Server timezone is unrecognizedMySQL 8.0 時區未設置URL 添加 serverTimezone=UTC 或 Asia/Shanghai
Public Key Retrieval is not allowedMySQL 8.0 caching_sha2_password 插件URL 添加 allowPublicKeyRetrieval=true (需 SSL) 或改用 mysql_native_password

多數據庫抽象封裝建議

public interface DatabaseConfig {
    String getDriverClassName();
    String buildUrl(String host, int port, String database);
    String getValidationQuery();
}

// MySQL 實現
public class MySQLConfig implements DatabaseConfig {
    public String getDriverClassName() { return "com.mysql.cj.jdbc.Driver"; }
    public String buildUrl(String host, int port, String db) {
        return String.format("jdbc:mysql://%s:%d/%s?useSSL=false&serverTimezone=UTC", host, port, db);
    }
    public String getValidationQuery() { return "SELECT 1"; }
}

// 使用工廠模式動態選擇
public class DataSourceFactory {
    public static DataSource create(DatabaseConfig config, String host, int port, String db, String user, String pass) {
        HikariConfig cfg = new HikariConfig();
        cfg.setDriverClassName(config.getDriverClassName());
        cfg.setJdbcUrl(config.buildUrl(host, port, db));
        cfg.setUsername(user);
        cfg.setPassword(pass);
        cfg.setConnectionTestQuery(config.getValidationQuery());
        return new HikariDataSource(cfg);
    }
}

總結

掌握各數據庫 JDBC URL 格式與驅動類名是 Java 後端開發基礎技能。建議:

  1. 收藏本表作為速查手冊
  2. 專案中統一使用連接池 (HikariCP) 管理連接生命週期
  3. 敏感資訊外部化配置,絕不提交代碼倉庫
  4. 新項目優先考慮原生驅動,避免橋接層效能損耗
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved