在輕量級 Java 應用、桌面工具、單元測試中,若不想引入連線池、JNDI、應用伺服器,可直接使用 JDBC-ODBC 橋接驅動 (sun.jdbc.odbc.JdbcOdbcDriver) 連接 Microsoft Access (.mdb/.accdb)。本文提供完整可運行代碼範例,並說明適用場景與遷移路徑。
import java.sql.*;
public class AccessDirectConnect {
public static void main(String[] args) {
// 1. JDBC-ODBC 連線字串:指定 ODBC 驅動名稱 + 檔案絕對路徑
String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\projects\\demo.mdb";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 2. 載入驅動類 (JDK 內建,無需外部 JAR)
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// 3. 建立連線
conn = DriverManager.getConnection(url);
// 4. 執行查詢
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT player_mobile FROM mcp_swty_player");
// 5. 處理結果集
while (rs.next()) {
System.out.println("Mobile: " + rs.getString("player_mobile"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 6. 關鍵:逆序關閉資源
closeQuietly(rs);
closeQuietly(stmt);
closeQuietly(conn);
}
}
private static void closeQuietly(AutoCloseable resource) {
if (resource != null) {
try { resource.close(); } catch (Exception ignored) {}
}
}
}
| 要素 | 說明 | 注意事項 |
|---|---|---|
| 驅動類 | sun.jdbc.odbc.JdbcOdbcDriver | JDK 內建 (rt.jar),JDK 8 後移除,需遷移 |
| URL 格式 | jdbc:odbc:driver={...};DBQ=path | 驅動名稱需與系統 ODBC 管理器中完全一致 |
| DSN-free | 無需預先在控制台建立系統/用戶 DSN | 部署簡單,適合綠色軟體 |
| 平台限制 | 僅限 Windows + 32-bit Office/Access Runtime | 64-bit JDK 需 64-bit Access 驅動,否則「找不到驅動」 |
| 並發能力 | 極低 (Access 檔案鎖機制) | 不適合多用戶併發寫入場景 |
| 目標 | 方案 | 關鍵依賴 | 優勢 |
|---|---|---|---|
| Access 繼續使用 | UCanAccess (純 Java JDBC 驅動) | ucanaccess-x.x.x.jar + jackcess + commons-lang + commons-logging | 跨平台、無 ODBC、支援 .accdb、Maven Central 可用 |
| 遷移至嵌入式資料庫 | H2 / Derby / SQLite (JDBC) | h2.jar / derby.jar / sqlite-jdbc.jar | 效能強、標準 SQL、零配置、單元測試友好 |
| 遷移至客戶端-伺服器 | MySQL / PostgreSQL / SQL Server | 對應 JDBC 驅動 | 企業級併發、安全、擴展、運維生態 |
// Maven 依賴 //// String url = "jdbc:ucanaccess://D:/projects/demo.mdb"; // 或 .accdb Class.forName("net.ucanaccess.jdbc.UcanaccessDriver"); Connection conn = DriverManager.getConnection(url); // 後續 JDBC 代碼完全相容net.sf.ucanaccess //ucanaccess //5.0.1 //
JDBC-ODBC 橋接提供了零依賴、零配置、直連 Access的便利,適合特定輕量場景。但受限於平台、併發、JDK 版本,生產環境強烈建議遷移至 UCanAccess 或嵌入式資料庫。理解這條演進路徑,能在技術債務重構、測試基礎設施建設、舊系統現代化中做出務實選擇。