如何解决Java7中JDBC:ODBC连接Access报No suitable driver错误
问题根因梳理&可行解决方案
先修正无效操作
- 你项目中添加的
mysql-connector.jar是MySQL数据库专属驱动,和Access连接完全无关,直接移除即可,避免依赖干扰。
针对JDBC-ODBC桥连接方案的修复步骤(你当前在用的方案)
- 修正JDBC URL大小写错误
JDBC-ODBC桥的协议前缀必须为小写jdbc:odbc:,你当前代码中全大写的JDBC:ODBC:会导致驱动无法识别连接请求,首先修改代码中的URL:
String db = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ="+path;
- 解决
sun.jdbc.odbc.JdbcOdbcDriver类找不到问题
Oracle JDK 7默认内置该驱动,如果你使用的是OpenJDK 7则无内置,直接替换为Oracle JDK 7即可;如果确认用的是Oracle JDK 7,检查NetBeans项目的编译/运行JDK配置,确保全局配置和项目配置的JDK版本一致。 - 校验ODBC驱动与JDK位数匹配
你安装的AccessDatabaseEngine的位数必须和运行项目的JDK位数完全一致:- 64位JDK必须安装64位AccessDatabaseEngine
- 32位JDK必须安装32位AccessDatabaseEngine
位数不匹配会导致驱动无法被正常识别。
- ODBC配置说明
你当前用的无DSN连接方式不需要提前在ODBC管理器中配置,上述步骤完成后即可运行;如果还是报错可以手动配置数据源:- 对应位数打开ODBC管理器:64位路径为
C:\Windows\System32\odbcad32.exe,32位路径为C:\Windows\SysWOW64\odbcad32.exe - 切换到系统DSN页,添加
Microsoft Access Driver (*.mdb, *.accdb)类型的数据源,设置数据源名称、关联你的Access文件后保存,将URL改为jdbc:odbc:你的数据源名即可。
- 对应位数打开ODBC管理器:64位路径为
更稳定的替代方案(无需依赖ODBC)
如果JDBC-ODBC桥的方案始终无法跑通,推荐使用UCanAccess纯Java驱动,无需安装AccessDatabaseEngine、无需处理位数匹配问题,兼容性更强:
- 导入UCanAccess全套依赖到项目:
ucanaccess.jar、jackcess.jar、commons-lang.jar、commons-logging.jar、hsqldb.jar - 修改连接代码即可:
public static Connection GetConnection(String path) throws Exception { String db = "jdbc:ucanaccess://" + path; Connection conn=DriverManager.getConnection(db); return conn; }
内容的提问来源于stack exchange,提问作者NoProg
相关产品推荐
相关产品推荐

