首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC++

JDBC-ODBC 橋接直連 Access (.mdb) 免配置 DSN 完整範例

     編輯:VC++

適用場景

  • Windows 平台 JSP/Servlet 小型專案,資料量較小,不想安裝配置資料庫伺服器。
  • 需快速原型開發、單機部署、嵌入式 Java 應用。
  • 同樣適用於 FoxPro、dBase、Excel、文本文件等擁有 ODBC 驅動的資料源。

核心連接字串

String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=books.mdb";

關鍵點:

  1. jdbc:odbc: 協議前綴,啟用 JDBC-ODBC 橋接器。
  2. driver={...} 直接指定 ODBC 驅動名稱,免去系統 DSN 配置。
  3. DBQ=books.mdb 指定資料庫檔案路徑(相對路徑基於 JVM 工作目錄,建議用絕對路徑 C:/data/books.mdb)。

完整可運行代碼

import java.sql.*;

public class AccessDirectConnect {
    public static void main(String[] args) {
        String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=books.mdb";
        try {
            // 1. 載入 JDBC-ODBC 驅動 (JDK 8 內建,JDK 9+ 已移除,需外部依賴)
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

            // 2. 建立連線
            Connection conn = DriverManager.getConnection(url);

            // 3. 執行查詢
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM books");

            // 4. 處理結果集
            if (rs.next()) {
                System.out.println("簡介: " + rs.getString("簡介"));
            }

            // 5. 關閉資源 (建議用 try-with-resources JDK 7+)
            rs.close();
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

版本與環境注意事項

JDK 版本JDBC-ODBC 橋接器狀態替代方案
JDK 7 / 8內建 sun.jdbc.odbc.JdbcOdbcDriver直接使用
JDK 9 ~ 17模組化移除,標準庫不再包含使用 OpenLink JDBC-ODBC Bridge 或 UCanAccess (純 Java 讀寫 Access)
JDK 21+同 JDK 9+推薦 UCanAccess + HikariCP 連接池

UCanAccess 遷移範例 (現代推薦)

// Maven 依賴
// 
//   com.healthmarketscience.jackcess
//   jackcess
//   3.0.1
// 
// 
//   net.sf.ucanaccess
//   ucanaccess
//   5.0.1
// 

String url = "jdbc:ucanaccess://C:/data/books.mdb";
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
Connection conn = DriverManager.getConnection(url);
// 後續 JDBC 操作完全相同

常見錯誤與解決

  1. ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver:JDK 9+ 環境,請改用 UCanAccess。
  2. SQLException: [Microsoft][ODBC Microsoft Access Driver] 無法開啟資料庫:
    • 檔案路徑錯誤或權限不足(需對 .mdb 所在目錄授予 Java 進程讀寫權限)。
    • 檔案已被獨佔開啟(Access 開啟時預設獨佔),關閉 Access 或連接字串加 ;Exclusive=0。
    • 32/64 位不匹配:Office 32 位需 32 位 JDK + 32 位 ODBC 驅動;建議統一 64 位環境。
  3. 中文欄位名亂碼:確保資料庫、JVM、Console 編碼一致 (UTF-8);UCanAccess 內部處理較佳。

效能與限制

  • Access 為檔案型資料庫,並發寫入性能差,適合「讀多寫少、單用戶、資料量 < 100MB」場景。
  • JDBC-ODBC 橋接器屬雙重轉換 (JDBC→ODBC→Jet Engine),延遲較高;UCanAccess 純 Java 解析較快。
  • 不支援預存程序、觸發器、複雜交易鎖定等企業級特性。

免 DSN 直連 Access 是 Java 輕量級專案的經典技巧;現代專案建議直接遷移至 UCanAccess 或嵌入式資料庫 (H2, SQLite) 以獲得跨平台、免驅動、長期維護優勢。

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