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

Java 連接資料庫完整指南:JDBC-ODBC 與原生驅動雙方案

     編輯:Java 相關知識

三層架構下的資料庫連接實戰

Java 應用程式透過 JDBC API 與關聯式資料庫互動。本文詳細說明兩種連接方案:JDBC-ODBC 橋接器(舊版適用)與原生 JDBC 驅動(現代標準),含設定步驟、程式碼範例與最佳實踐。

架構概覽

標準三層架構:

  • 客戶端:Java 應用程式
  • 中介層:JDBC 驅動程式
  • 伺服端:資料庫管理系統 (DBMS)

方案一:JDBC-ODBC 橋接器(已淘汰,僅供維護舊專案參考)

原理:Java → JDBC-ODBC Bridge → ODBC 驅動 → DBMS

Windows ODBC 設定步驟:

  1. 開啟「控制台」→「系統管理工具」→「ODBC 資料來源」
  2. 選「使用者 DSN」或「系統 DSN」→「新增」
  3. 選擇對應驅動(如 Microsoft Access Driver)
  4. 輸入資料源名稱(DSN)、選擇資料庫檔案、設定認證

程式碼範例

public static Connection connectViaJdbcOdbc(String dsn, String user, String pwd) {
    Connection conn = null;
    try {
        // 1. 載入橋接驅動
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        
        // 2. 建立連接
        String url = "jdbc:odbc:" + dsn;
        conn = DriverManager.getConnection(url, user, pwd);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
    return conn;
}

// 使用範例
Connection conn = connectViaJdbcOdbc("myDSN", "admin", "1234");
if (conn != null) {
    System.out.println("連接成功");
    conn.close();
}

方案二:原生 JDBC 驅動(推薦,跨平台、效能優)

核心步驟:

  1. 下載資料庫廠商提供的 JDBC 驅動 JAR(如 MySQL Connector/J、PostgreSQL JDBC、Oracle JDBC、SQL Server JDBC)
  2. 將 JAR 加入專案類別路徑
  3. 載入驅動類別 → 建立連接 URL → 取得連接

主流資料庫連接參數對照

資料庫驅動類別URL 格式預設埠口
MySQLcom.mysql.cj.jdbc.Driverjdbc:mysql://host:port/db?useSSL=false&serverTimezone=UTC3306
PostgreSQLorg.postgresql.Driverjdbc:postgresql://host:port/db5432
Oracleoracle.jdbc.OracleDriverjdbc:oracle:thin:@host:port:sid1521
SQL Servercom.microsoft.sqlserver.jdbc.SQLServerDriverjdbc:sqlserver://host:port;databaseName=db1433

通用連接工具類

public class JdbcUtil {
    // 靜態區塊載入驅動(僅執行一次)
    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver"); // 依專案實際資料庫調整
        } catch (ClassNotFoundException e) {
            throw new ExceptionInInitializerError("找不到 JDBC 驅動: " + e.getMessage());
        }
    }

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

    public static void close(Connection conn, Statement stmt, ResultSet rs) {
        try { if (rs != null) rs.close(); } catch (SQLException ignored) {}
        try { if (stmt != null) stmt.close(); } catch (SQLException ignored) {}
        try { if (conn != null) conn.close(); } catch (SQLException ignored) {}
    }
}

連接池技術(生產環境必備)

頻繁建立/關閉連接效能極差,必須使用連接池:

  • HikariCP:目前效能最佳、預設 Spring Boot 2.x+
  • Druid:阿里巴巴開源,監控功能強大
  • DBCP2:Apache Commons 專案,較舊但穩定

HikariCP 設定範例

HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC");
config.setUsername("root");
config.setPassword("password");
config.setMaximumPoolSize(20);
config.setMinimumIdle(5);
config.setConnectionTimeout(30000);
config.setIdleTimeout(600000);
config.setMaxLifetime(1800000);

HikariDataSource ds = new HikariDataSource(config);
// 使用時:Connection conn = ds.getConnection();

最佳實踐總結

  1. 棄用 JDBC-ODBC:Java 8 起移除,僅維護極舊系統
  2. 使用原生驅動:效能好、跨平台、功能完整
  3. 必上連接池:生產環境無連接池不可用
  4. 資源確實釋放:try-with-resources 或 finally 區塊關閉 Connection/Statement/ResultSet
  5. 參數化查詢:使用 PreparedStatement 防 SQL 注入
  6. 外部化設定:URL、帳密放在設定檔或環境變數,勿硬編碼
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved