在 Java 中连接 Microsoft Access 2007 数据库的正确方法是啥?

Posted

技术标签:

【中文标题】在 Java 中连接 Microsoft Access 2007 数据库的正确方法是啥?【英文标题】:What's the right way in Java to connect to a Microsoft Access 2007 database?在 Java 中连接 Microsoft Access 2007 数据库的正确方法是什么? 【发布时间】:2009-03-24 02:22:29 【问题描述】:

我正在尝试使用 jdbc-odbc 桥创建一个简单的连接:

public static Connection  getConnection() 
    Connection con =null;
    try 
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        String conStr = "jdbc:odbc:Driver=Microsoft Access Driver (*.mdb, *.accdb);DBQ=" +
            "c:\\myfolder\\accesdbfile.accdb";
        con = DriverManager.getConnection(conStr);
     catch(Exception e) 
        e.printStackTrace();
    return con;

但是我得到了这个异常:

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0xa4 Thread 0xec0 DBC 0x2f8574c                                                              Jet'.

有什么想法吗?

2009 年 3 月 24 日更新:现在它正在工作。创建了一个用户数据源,但由于某种原因异常消失了。

作为一个普遍的问题,在 Java 中处理数据库连接的最佳方式是什么?

【问题讨论】:

"General error Unable to open registry key Temporary (volatile) ..." from Access ODBC 的可能重复项 @GordThompson 所以 5 年前创建的问题可能与 12 天前提出的问题重复? “如果新问题是更好的问题或有更好的答案,则投票关闭旧问题作为新问题的副本。”(参考:@987654322 @) 【参考方案1】:

一般而言,在 Java 中使用 RDBMS 的最佳方式是使用旨在直接连接到数据库的 JDBC 驱动程序。使用 JDBC-ODBC 桥往往会很慢。

如果您尝试使用 Access 数据库进行基本的读/写操作,我还建议您查看 Jackcess 库。

【讨论】:

【参考方案2】:

要回答您的一般问题,我想说在 Java 中处理数据库连接的最佳方法是避免使用 JDBC-ODBC 桥。它可以用于测试或学习 JDBC,但不适用于实际生产使用。此外,如果您的数据源没有自己的 JDBC 驱动程序但有 ODBC 驱动程序,那么您可能别无选择。

我建议您远离它的主要原因是它使您的应用程序难以部署。您必须在运行应用程序的机器上设置数据源。如果您可以访问机器没有问题,但假设您将应用程序发送到客户端?纯 Java JDBC 驱动程序在这方面效果更好,因为它作为应用程序的一部分包含在内,因此一旦安装了应用程序,它就可以连接到数据源了。

当然,根据您的要求,还有其他两种类型的驱动程序,但这是另一个讨论。

【讨论】:

此外,Oracle 已声明 JDBC-ODBC 桥“将在 JDK 8 中删除”(参考:here)。【参考方案3】:
    转到控制面板 --> 管理工具 --> ODBC 数据源管理器 添加数据库 --> 选择“Microsoft Driver(*.mdb, *.accdb)” 双击新数据库 --> 在“数据库”下单击“选择” --> 选择您创建的 *.accdb 文件作为 MS 访问数据库。 说好,然后转到你的 java 代码 使用: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con = DriverManager.getConnection("jdbc:odbc:filename");

它一定会解决你所有的问题。

【讨论】:

以上是关于在 Java 中连接 Microsoft Access 2007 数据库的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中连接 Microsoft Access 2007 数据库的正确方法是啥?

我们如何从 ACCE 调试批量操作 javascript?

用jdbc连接数据库时出现java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDrive

java jdbc连接异常问题数据库

带有触发器错误的 Microsoft Access 链接表 (ASE)

java数据库连接sqlserver问题