我想从我的Java项目中操作Microsoft Access数据库(.accdb或.mdb文件)。我不想使用Microsoft的JDBC-ODBC桥和Access ODBC驱动程序,因为:


JDBC-ODBC桥已从Java SE 8中删除,并且不受支持( ref:此处),
当文本包含代码点超过U + 00FF的Unicode字符时,JDBC-ODBC Bridge不能与Access ODBC驱动程序一起正常工作(ref:此处),因此这种设置将无法可处理诸如希腊语,俄语,中文,阿拉伯语等字符。
Microsoft的Access ODBC驱动程序仅在Windows中有效,并且
有单独的32位和64位版本的Access数据库引擎(和ODBC驱动程序)可能会对部署造成麻烦。

我看到了其他答案,其中提到了名为UCanAccess的Access数据库的JDBC驱动程序。如何设置我的Java项目以使用这种方法?

(最好也建议使用Java来访问Access数据库的更好方法。)

评论

戈德,我想与您联系。电子邮件地址,可以吗?干杯

您也可以在jre8中使用来自jre7的jdbc odbc类-请参见stackoverflow.com/a/34617075/2110961

#1 楼

UCanAccess是纯Java JDBC驱动程序,它使我们无需使用ODBC即可读写Access数据库。它使用另外两个软件包Jackcess和HSQLDB来执行这些任务。下面是有关如何进行设置的简要概述。



方法1:使用Maven

如果您的项目使用Maven,则可以只需通过以下坐标包含UCanAccess:

groupId:net.sf.ucanaccessartifactId:ucanaccess

以下是pom.xml的摘录,您可能需要更新<version>才能获得最新版本:

   <dependencies>
    <dependency>
        <groupId>net.sf.ucanaccess</groupId>
        <artifactId>ucanaccess</artifactId>
        <version>4.0.4</version>
    </dependency>
  </dependencies>
 




选项2:手动将JAR添加到您的项目中

如上所述,UCanAccess需要Jackcess和HSQLDB。反过来,Jackcess也有其自己的依赖性。因此,要使用UCanAccess,您将需要包括以下组件:

UCanAccess(ucanaccess-xxxjar)HSQLDB(hsqldb.jar,版本2.2.5或更高版本)Jackcess(jackcess-2.xxjar) commons-lang(commons-lang-2.6.jar或更高版本2.x版本)commons-logging(commons-logging-1.1.1.jar或更高版本1.x版本)

UCanAccess在其分发文件中包含所有必需的JAR文件。解压缩后,您会看到类似

 ucanaccess-4.0.1.jar  
  /lib/
    commons-lang-2.6.jar  
    commons-logging-1.1.1.jar  
    hsqldb.jar  
    jackcess-2.1.6.jar
 


的所有内容所有五(5)个JAR文件都添加到项目中。


注意:如果要添加其他五(5)个JAR文件,请不要在构建路径中添加loader/ucanload.jarUcanloadDriver类仅在特殊情况下使用,并且需要不同的设置。有关详细信息,请参见此处的相关答案。


Eclipse:在Package Explorer中右键单击该项目,然后选择Build Path > Configure Build Path...。单击“添加外部JAR ...”按钮以添加五(5)个JAR。完成后,您的Java Build Path应该看起来像这样



NetBeans:展开项目的树形视图,右键单击“库”文件夹,然后选择“添加JAR /文件夹...”,然后浏览到JAR文件。



添加所有五(5)个JAR文件后,“库”文件夹应如下所示:



IntelliJ IDEA:从主菜单中选择File > Project Structure...。在“库”窗格中,单击“添加”(+)按钮,然后添加五(5)个JAR文件。完成后,项目应如下所示:





就这样!

现在“ U可以使用这样的代码访问.accdb和.mdb文件中的数据

 // assumes...
//     import java.sql.*;
Connection conn=DriverManager.getConnection(
        "jdbc:ucanaccess://C:/__tmp/test/zzz.accdb");
Statement s = conn.createStatement();
ResultSet rs = s.executeQuery("SELECT [LastName] FROM [Clients]");
while (rs.next()) {
    System.out.println(rs.getString(1));
}
 




披露

在撰写本问答时,我没有参与或与UCanAccess项目有任何关系。我刚用过从那以后,我成为该项目的贡献者。

评论


您与此图书馆有任何隶属关系吗?如果这样做,可能值得披露。

–乔
2014年2月22日15:10



您可以使用它连接到Java 8中的Excel工作簿(.xlsx)吗?

– steinbitur
2014年5月4日13:54

@sємsєм驱动程序类是net.ucanaccess.jdbc.UcanaccessDriver

–汤普森(Gord Thompson)
2014-09-26 14:06

@GordThompson这是一个很好的答案。我的整个班级都被这个问题困扰,认为它是文件系统特权错误。帮助我进行装载,并且花了令人惊讶的大量挖掘才意识到Oracle完全摆脱了Java 8的JDBC-ODBC桥。

–wilbomc
15年1月22日在1:23

如何通过Hibernate和Spring将UcanAcces数据源集成到JPA?

–沃伦·诺科斯(Warren Nocos)
2015年10月7日11:00