掌握各主流數據庫的 JDBC 驅動類名、URL 格式、關鍵參數,是 Java 開發者的基本功。本文匯總 8 大主流數據庫的標準連接配置,並解析核心參數含義與常見坑點。
// 驅動類
Class.forName("oracle.jdbc.driver.OracleDriver"); // 11g及之前
// 或 oracle.jdbc.OracleDriver (12c+ 推薦)
// URL 格式
jdbc:oracle:thin:@:: // SID 模式(傳統)
jdbc:oracle:thin:@:/ // Service Name 模式(推薦,支持 RAC)
jdbc:oracle:thin:@//:/ // 易連接語法
// 示例
String url = "jdbc:oracle:thin:@localhost:1521:ORCL";
String url = "jdbc:oracle:thin:@//localhost:1521/ORCLPDB1";
// 關鍵參數
// user/password、oracle.net.CONNECT_TIMEOUT、oracle.jdbc.ReadTimeout
// defaultRowPrefetch、defaultBatchValue、useFetchSizeWithLongColumn
// 驅動類
Class.forName("com.mysql.cj.jdbc.Driver"); // 8.0+ (MySQL Connector/J)
// 5.1 版本: com.mysql.jdbc.Driver
// URL 格式
jdbc:mysql://:/?=&=...
// 核心參數(必加推薦)
// useSSL=false // 非生產環境關閉 SSL
// allowPublicKeyRetrieval=true // 允許公鑰獲取(配合 caching_sha2_password)
// serverTimezone=UTC // 時區,必須設置避免時區差異
// characterEncoding=utf8mb4 // 字符集,支持 emoji
// useUnicode=true // 使用 Unicode
// autoReconnect=true // 自動重連(生產環境建議配合連接池而非依賴此項)
// rewriteBatchedStatements=true // 批量執行優化(關鍵性能參數)
// cachePrepStmts=true // 緩存 PreparedStatement
// prepStmtCacheSize=250 // 緩存大小
// prepStmtCacheSqlLimit=2048 // 單條 SQL 緩存長度限制
// connectTimeout=30000 // 連接超時 ms
// socketTimeout=60000 // 讀寫超時 ms
// 完整示例
String url = "jdbc:mysql://localhost:3306/my_db?" +
"useSSL=false&" +
"allowPublicKeyRetrieval=true&" +
"serverTimezone=Asia/Shanghai&" +
"characterEncoding=utf8mb4&" +
"useUnicode=true&" +
"rewriteBatchedStatements=true&" +
"cachePrepStmts=true&" +
"prepStmtCacheSize=250&" +
"prepStmtCacheSqlLimit=2048&" +
"connectTimeout=30000&" +
"socketTimeout=60000";
// 驅動類
Class.forName("org.postgresql.Driver");
// URL 格式
jdbc:postgresql://:/?
// 核心參數
// user/password
// sslmode=disable/require/verify-ca/verify-full
// currentSchema=my_schema // 設置默認 Schema
// ApplicationName=MyApp // 應用名稱(便於 pg_stat_activity 監控)
// prepareThreshold=5 // PreparedStatement 緩存閾值
// preferQueryMode=simple/extended // 查詢模式
// 示例
String url = "jdbc:postgresql://localhost:5432/my_db?" +
"sslmode=disable&" +
"currentSchema=public&" +
"ApplicationName=MyApp&" +
"prepareThreshold=5";
// 驅動類
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); // 官方驅動
// 或 com.microsoft.jdbc.sqlserver.SQLServerDriver (舊版 jTDS)
// URL 格式
jdbc:sqlserver://:;databaseName=;[params]
// 核心參數
// user/password
// encrypt=true/false // 加密連接
// trustServerCertificate=true // 信任服務器證書(開發環境)
// loginTimeout=30 // 登錄超時秒
// socketTimeout=30 // Socket 超時秒
// applicationName=MyApp // 應用名
// sendStringParametersAsUnicode=true // 字符串參數作為 Unicode 發送
// 示例
String url = "jdbc:sqlserver://localhost:1433;" +
"databaseName=my_db;" +
"encrypt=false;" +
"trustServerCertificate=true;" +
"loginTimeout=30;" +
"applicationName=MyApp";
// 驅動類
// Type 4 (通用): com.ibm.db2.jcc.DB2Driver
// Type 2 (本地): com.ibm.db2.jdbc.app.DB2Driver
// URL 格式
jdbc:db2://:/:;
// 核心參數
// user/password
// currentSchema=SCHEMA
// securityMechanism=3/4/7/9/11/13 // 認證機制
// sslConnection=true
// 示例
String url = "jdbc:db2://localhost:50000/SAMPLE:" +
"currentSchema=MY_SCHEMA;" +
"securityMechanism=3;";
// 驅動類
Class.forName("com.sybase.jdbc4.jdbc.SybDriver"); // jConnect 7+
// URL 格式
jdbc:sybase:Tds::/?
// 核心參數
// user/password
// CHARSET=utf8
// ENABLE_BULK_LOAD=true
// BATCH_SIZE=1000
// 示例
String url = "jdbc:sybase:Tds:localhost:5000/myDB?CHARSET=utf8";
// 驅動類
Class.forName("com.informix.jdbc.IfxDriver");
// URL 格式
jdbc:informix-sqli://:/:INFORMIXSERVER=;
// 核心參數
// user/password
// IFX_LOCK_MODE_WAIT=10
// DELIMIDENT=y
// 示例
String url = "jdbc:informix-sqli://123.45.67.89:1533/myDB:" +
"INFORMIXSERVER=myserver;" +
"user=testuser;password=testpass";
注意:JDK 8 移除了 JDBC-ODBC Bridge (
sun.jdbc.odbc.JdbcOdbcDriver),生產環境請使用純 Java 驅動 UCanAccess (依賴 Jackcess)。
// 驅動類 (UCanAccess)
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
// URL 格式
jdbc:ucanaccess://[,param=value...]
// 核心參數
// singleConnection=true // 單連接模式(Access 文件鎖限制)
// ignoreCase=true // 忽略大小寫
// showSchema=true // 顯示 Schema
// 示例
String url = "jdbc:ucanaccess:///data/mydb.accdb?singleConnection=true";
HikariConfig config = new HikariConfig();
config.setJdbcUrl(url);
config.setUsername(user);
config.setPassword(password);
// 核心池參數
config.setMaximumPoolSize(20); // 最大連接數
config.setMinimumIdle(5); // 最小空閒
config.setIdleTimeout(300000); // 空閒超時 5 分鐘
config.setMaxLifetime(1800000); // 連接最大壽命 30 分鐘
config.setConnectionTimeout(30000); // 獲取連接超時 30 秒
config.setLeakDetectionThreshold(60000); // 洩漏檢測 60 秒
// 數據庫特定優化
config.addDataSourceProperty("cachePrepStmts", "true"); // MySQL
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
config.addDataSourceProperty("useServerPrepStmts", "true"); // PostgreSQL
config.addDataSourceProperty("prepareThreshold", "5");
HikariDataSource dataSource = new HikariDataSource(config);
connectionTestQuery: SELECT 1 / validationTimeoutJDBC 連接配置看似簡單,實則關係系統穩定性與性能。建議:統一使用連接池(HikariCP)、外部化配置、參數化優化、啟用監控。收藏本文,新項目接入新數據庫時查閱對應章節,少踩坑、快交付。