設計目標
- 單例模式管理連線池入口。
- 外部屬性檔
config.properties 切換資料源類型 (Oracle/SQL Server/MySQL)。
- 統一異常處理、資源關閉。
核心類 DBConn
package net.fzjol.common.util;
import java.sql.*;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
public class DBConn {
private static DBConn instance = null;
private Connection conn = null;
private DBConn() {} // 單例私有建構子
public synchronized static DBConn getInstance() {
if (instance == null) instance = new DBConn();
return instance;
}
public Connection getConnection() {
try {
ResourceBundle rb = PropertyResourceBundle.getBundle("config");
String type = rb.getString("dataType"); // Oracle | sqlserver | MySQL
String driver = rb.getString(type + ".driver");
String url = rb.getString(type + ".url");
String user = rb.getString(type + ".user");
String pwd = rb.getString(type + ".pswd");
Class.forName(driver);
conn = DriverManager.getConnection(url, user, pwd);
conn.setAutoCommit(false); // 交易手動控制
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return conn;
}
// 建議補充:closeConnection、commit、rollback 等輔助方法
}
配置檔 config.properties
# 切換這裡即可換資料庫
dataType = Oracle
# Oracle
oracle.driver = oracle.jdbc.driver.OracleDriver
oracle.url = jdbc:oracle:thin:@172.0.0.1:1521:ORCL
oracle.user = scott
oracle.pswd = dbmaster
# SQL Server 2000 (舊驅動)
sqlserver.driver = com.microsoft.jdbc.sqlserver.SQLServerDriver
sqlserver.url = jdbc:microsoft:sqlserver://172.0.0.1:1433;DatabaseName=test
sqlserver.user = sa
sqlserver.pswd = dbmaster
# SQL Server 2005+ (新驅動)
# sqlserver.driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
# sqlserver.url = jdbc:sqlserver://172.0.0.1:1433;databaseName=test
# MySQL
mysql.driver = com.mysql.jdbc.Driver
mysql.url = jdbc:mysql://localhost:3306/test
mysql.user = root
mysql.pswd = dbmaster
生產環境強化建議
- **替換單例連線為真正連線池**:
HikariCP / Druid / DBCP2,配置 maximumPoolSize、idleTimeout、connectionTestQuery。
- **密碼加密**:配置檔密碼欄位加密 (AES/Jasypt),啟動時解密。
- **資源確實釋放**:
try-with-resources (Java 7+) 包裝 Connection/Statement/ResultSet。
- **移除
Class.forName**:JDBC 4.0+ (Java 6+) 驅動自動載入 (SPI 機制)。
- **多資料源路由**:
AbstractRoutingDataSource (Spring) 實現讀寫分離、租戶隔離。
驅動版本對照表
| 資料庫 | 驅動類別 | Maven 坐標 (範例) |
| SQL Server 2000 | com.microsoft.jdbc.sqlserver.SQLServerDriver | com.microsoft.sqlserver:sqljdbc:3.0 (舊版需手動安裝) |
| SQL Server 2005+ | com.microsoft.sqlserver.jdbc.SQLServerDriver | com.microsoft.sqlserver:mssql-jdbc:12.2.0.jre11 |
| Oracle 11g+ | oracle.jdbc.OracleDriver | com.oracle.database.jdbc:ojdbc10:19.3.0.0 |
| MySQL 5.6+ | com.mysql.cj.jdbc.Driver | mysql:mysql-connector-java:8.0.33 |