在 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 数据库的正确方法是啥?
用jdbc连接数据库时出现java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDrive