Java 访问 Access 数据库指南
在 Java 中访问 Access 数据库,通常有两种主要方法:使用 JDBC-ODBC 桥接(已废弃)或使用 UCanAccess 等纯 Java JDBC 驱动程序,以下是详细步骤:

使用 UCanAccess(推荐)
UCanAccess 是一个纯 Java JDBC 驱动程序,无需安装 ODBC 驱动,适合现代 Java 应用。
添加依赖
如果你使用 Maven,在 pom.xml 中添加:
<dependency>
<groupId>com.healthmarketscience.jackcess</groupId>
<artifactId>jackcess</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>net.ucanaccess</groupId>
<artifactId>ucanaccess</artifactId>
<version>5.0.1</version>
</dependency>
连接代码示例
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class AccessDBExample {
public static void main(String[] args) {
String dbURL = "jdbc:ucanaccess://C:/path/to/your/database.accdb";
try (Connection conn = DriverManager.getConnection(dbURL);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM YourTableName")) {
while (rs.next()) {
// 假设表有两列:ID 和 Name
System.out.println("ID: " + rs.getInt("ID") +
", Name: " + rs.getString("Name"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用 JDBC-ODBC 桥接(已废弃)
注意:此方法已弃用,仅适用于旧代码维护。
配置 ODBC 数据源
- 在 Windows 控制面板中打开"ODBC 数据源管理器"
- 添加一个"用户 DSN"或"系统 DSN",指向你的 Access 数据库
- 给数据源命名(如 "MyAccessDB")
连接代码示例
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class AccessODBCExample {
public static void main(String[] args) {
String dbURL = "jdbc:odbc:MyAccessDB";
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection(dbURL, "", "");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM YourTableName");
while (rs.next()) {
System.out.println("ID: " + rs.getInt("ID") +
", Name: " + rs.getString("Name"));
}
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
常见问题解决
- 路径问题:确保数据库路径正确,使用绝对路径更可靠
- 权限问题:确保 Java 进程有访问数据库文件的权限
- 数据库锁定:Access 数据库被独占访问时会锁定,确保没有其他程序打开它
- JDBC 版本:UCanAccess 有版本要求,确保与你的 Java 版本兼容
高级操作
插入数据
String sql = "INSERT INTO YourTableName (ID, Name) VALUES (1, 'John Doe')"; stmt.executeUpdate(sql);
更新数据
String sql = "UPDATE YourTableName SET Name = 'Jane Doe' WHERE ID = 1"; stmt.executeUpdate(sql);
删除数据
String sql = "DELETE FROM YourTableName WHERE ID = 1"; stmt.executeUpdate(sql);
注意事项
- Access 数据库不适合高并发应用
- 对于大型数据库,考虑迁移到更强大的数据库系统
- 始终使用 try-with-resources 或 finally 块确保资源释放
UCanAccess 是目前访问 Access 数据库的最佳选择,它提供了更好的兼容性和性能。


