You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过带DNS的UCanAccess访问32位ODBC驱动?

解决通过DSN访问32位ODBC驱动的问题(Java 11 + JavaFX环境)

一、核心澄清与限制说明

  1. UCanAccess是纯Java实现的Access数据库驱动,无需依赖ODBC驱动,可直接读写.mdb/.accdb文件,不需要通过ODBC中间层。你提供的示例连接字符串jdbc:ucanaccess:pmg不符合UCanAccess标准格式,正确格式应为:
    jdbc:ucanaccess:///path/to/your/database.mdb;charset=utf-8
    
  2. Java 11已移除内置的JDBC-ODBC桥(sun.jdbc.odbc.JdbcOdbcDriver),无法直接使用传统ODBC连接方式。若必须通过32位ODBC DSN访问,需借助第三方JDBC-ODBC桥驱动。

二、适配32位ODBC驱动的关键前提

ODBC驱动的位数必须与Java运行环境的位数严格匹配:

  • 若当前Java 11是64位,只能加载64位ODBC驱动;若要使用32位ODBC驱动,需切换为32位Java 11。
  • 验证Java位数:终端执行java -version,查看输出中的位数标识(如64-Bit或32-Bit)。

三、方案1:直接使用UCanAccess连接数据库文件(推荐)

跳过ODBC DSN,直接用UCanAccess连接Access文件,避免ODBC兼容性问题:

  1. 引入UCanAccess依赖(Maven示例):
    <dependency>
        <groupId>net.sf.ucanaccess</groupId>
        <artifactId>ucanaccess</artifactId>
        <version>5.0.1</version>
    </dependency>
    
  2. 编写连接代码:
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    public class AccessConnector {
        public static void main(String[] args) {
            String dbFilePath = "/path/to/your/pmg.mdb"; // 替换为实际数据库文件路径
            String connUrl = "jdbc:ucanaccess://" + dbFilePath;
            try (Connection conn = DriverManager.getConnection(connUrl)) {
                System.out.println("数据库连接成功");
                // 执行查询、更新等操作
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    

四、方案2:通过第三方JDBC-ODBC桥连接32位ODBC DSN

若必须使用ODBC DSN,可采用开源免费的JTOpen JDBC-ODBC Bridge:

  1. 下载适配32位Java环境的jt400.jar,添加到项目类路径/模块路径中。
  2. 编写DSN连接代码:
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    public class OdbcConnector {
        public static void main(String[] args) {
            String dsnName = "pmg";
            String connUrl = "jdbc:odbc:" + dsnName;
            try {
                Class.forName("com.ibm.as400.access.AS400JDBCDriver"); // 加载桥驱动
                try (Connection conn = DriverManager.getConnection(connUrl)) {
                    System.out.println("ODBC DSN连接成功");
                    // 执行数据库操作
                }
            } catch (ClassNotFoundException | SQLException e) {
                e.printStackTrace();
            }
        }
    }
    
  3. 额外配置:确保32位ODBC数据源(DSNpmg)是通过32位ODBC管理器创建的,路径为C:\Windows\SysWOW64\odbcad32.exe(仅适用于Windows系统)。

五、JavaFX环境适配注意事项

  • 将驱动依赖(UCanAccess或JTOpen的jar包)正确添加到JavaFX项目的模块路径或类路径中。
  • 若使用模块化JavaFX项目,需在module-info.java中声明依赖:
    module your.module.name {
        requires java.sql;
        requires ucanaccess; // 使用UCanAccess时添加
        // 使用JTOpen时添加 requires jt400;
        exports your.package.name;
    }
    

内容的提问来源于stack exchange,提问作者Charlo Poitras

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:55:15