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

DBUtil 連接工具類設計:Properties 配置文件實現數據庫連接解耦

     編輯:MySQL 綜合教學

為什麼需要工具類?

硬編碼驅動、URL、用戶名、密碼會導致:換數據庫需改代碼重編譯、密碼洩露風險、環境遷移困難。引入 db.properties 配置文件 + DBUtil 工具類,實現「配置與代碼分離」。

項目結構

src/
├─ com/daliu/jdbc/
│  ├─ DBUtil.java
│  └─ db.properties

db.properties 配置文件

# 驅動類全限定名
jdbc.driver=com.mysql.jdbc.Driver
# 連接字符串(含字符集、時區等參數)
jdbc.url=jdbc:mysql://localhost:3306/csdn?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
# 用戶名
jdbc.user=root
# 密碼(生產環境建議加密存儲)
jdbc.password=123456

DBUtil 核心實現

package com.daliu.jdbc;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class DBUtil {
    private static String url, user, pwd, driver;

    static {
        try {
            Properties prop = new Properties();
            // 從類路徑加載配置文件
            InputStream is = DBUtil.class.getClassLoader()
                    .getResourceAsStream("com/daliu/jdbc/db.properties");
            prop.load(is);
            is.close();

            driver = prop.getProperty("jdbc.driver");
            url = prop.getProperty("jdbc.url");
            user = prop.getProperty("jdbc.user");
            pwd = prop.getProperty("jdbc.password");

            // 註冊驅動
            Class.forName(driver);
        } catch (Exception e) {
            throw new ExceptionInInitializerError(e);
        }
    }

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url, user, pwd);
    }

    public static void closeConnection(Connection conn) {
        if (conn != null) {
            try { conn.close(); } catch (SQLException e) { e.printStackTrace(); }
        }
    }

    // 測試主方法
    public static void main(String[] args) throws Exception {
        System.out.println(getConnection());
    }
}

關鍵點解析

  • 類路徑加載: ClassLoader.getResourceAsStream() 不依賴絕對路徑,打包為 JAR 後仍可工作。
  • 靜態塊初始化: 類加載時一次性讀取配置、註冊驅動,後續調用零開銷。
  • 異常處理: 初始化失敗拋 ExceptionInInitializerError,快速失敗。
  • 關閉方法: 靜態工具方法,統一處理 null 吞噬異常,簡化業務代碼。

進階擴展方向

  1. 連接池整合: 替換 DriverManager 為 DataSource (HikariCP/Druid),getConnection() 從池獲取。
  2. 多環境配置: db-dev.properties, db-prod.properties,啟動參數 -Denv=prod 動態切換。
  3. 密碼加密: 配置文件存密文,DBUtil 初始化時解密(AES/Jasypt)。
  4. ThreadLocal 綁定: 同一線程事務內復用同一連接,避免傳遞 Connection 參數。

測試驗證

public class TestDBUtil {
    public static void main(String[] args) throws Exception {
        Connection conn = DBUtil.getConnection();
        System.out.println("連接成功: " + conn);
        DBUtil.closeConnection(conn);
    }
}

輸出:連接成功: com.mysql.jdbc.JDBC4Connection@... 即表示配置正確。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved