在不使用 ODBC 的情况下从 Java 操作 Access 数据库

我想操作一个 MicrosoftAccess 数据库(。或。Mdb 文件)。我不想使用 JDBC-ODBC 桥和来自 Microsoft 的 Access ODBC 驱动程序,因为:

  • JDBC-ODBC 桥已经从 JavaSE8中删除,并且不受支持(参考文献: 给你) ,
  • 当文本包含编码点在 U + 00 FF (参考文献: 给你)以上的 Unicode 字符时,JDBC-ODBC 桥不能正常工作于 Access ODBC 驱动程序,因此这样的设置不能处理希腊、俄罗斯、中国、阿拉伯等字符,
  • 来自 Microsoft 的 Access ODBC 驱动程序只能在 Windows 中工作,并且
  • Access 数据库引擎(和 ODBC 驱动程序)有单独的32位和64位版本,这对于部署来说可能是一个麻烦。

我看到过其他答案提到用于 Access 数据库的 JDBC 驱动程序 UCanAccess。如何设置 Java 项目来使用这种方法?

(我们也非常欢迎关于如何更好地使用 Java Access 数据库的建议。)

182374 次浏览

UCanAccess 是一个纯 Java JDBC 驱动程序,它允许我们在不使用 ODBC 的情况下读写 Access 数据库。它使用另外两个包 杰克斯HSQLDB来执行这些任务。下面是如何设置它的简要概述。

选项1: 使用 Maven

如果你的项目使用 玛文,你可以简单地通过以下坐标包含 UCanAccess:

GroupId: net.sf.ucanaccess
ArtifactId: ucanaccess

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

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

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

如上所述,UCanAccess 需要 Jackess 和 HSQLDB。Jackess 依次拥有自己的 依赖关系。因此,要使用 UCanAccess,您需要包括以下组件:

UCanAccess (UCanAccess-x.x.x.jar)
HSQLDB (HSQLDB.jar,版本2.2.5或更新)
Jackess (jackess-2.x.x.jar)
Commons-lang (commons-lang-2.6.jar,或更新的 2.x 版本)
commons-logging (commons-logging-1.1.1.jar, or newer 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...。单击“ AddExternalJAR...”按钮添加五个 JAR 中的每一个。完成后,您的 JavaBuildPath 应该类似于下面的内容

BuildPath.png

NetBeans: 展开项目的树视图,右键单击“ Library”文件夹并选择“ Add JAR/Folder...”,然后浏览到 JAR 文件。

nbAddJar.png

After adding all five (5) JAR files the "Libraries" folder should look something like this:

nbLibraries.png

IntelliJ IDEA: 从主菜单中选择 File > Project Structure...。在“ Library”窗格中单击“ Add”(+)按钮并添加五个(5) JAR 文件。一旦完成,项目应该是这样的:

IntelliJ.png

 

就是这样!

现在,“ U Can Access”数据在. 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));
}

披露

At the time of writing this Q&A I had no involvement in or affiliation with the UCanAccess project; I just used it. I have since become a contributor to the project.