String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=books.mdb";
關鍵點:
jdbc:odbc: 協議前綴,啟用 JDBC-ODBC 橋接器。driver={...} 直接指定 ODBC 驅動名稱,免去系統 DSN 配置。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 連接池 |
// 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 操作完全相同
;Exclusive=0。免 DSN 直連 Access 是 Java 輕量級專案的經典技巧;現代專案建議直接遷移至 UCanAccess 或嵌入式資料庫 (H2, SQLite) 以獲得跨平台、免驅動、長期維護優勢。