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

原文 标签 java ms-access ucanaccess

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


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


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

(回答建议最好的方法是使用Java访问Access数据库也将受到欢迎。)

最佳答案

UCanAccess是纯Java JDBC驱动程序,它使我们可以在不使用ODBC的情况下读写Access数据库。它使用其他两个包JackcessHSQLDB来执行这些任务。以下是有关如何进行设置的简要概述。



选项1:使用Maven

如果您的项目使用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需要Jackcess和HSQLDB。反过来,Jackcess也有自己的dependencies。因此,要使用UCanAccess,您将需要包括以下组件:

UCanAccess(ucanaccess-x.x.x.jar)
HSQLDB(hsqldb.jar,版本2.2.5或更高版本)
Jackcess(jackcess-2.x.x.jar)
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类仅在特殊情况下使用,并且需要不同的设置。有关详细信息,请参见相关答案here


Eclipse:在Package Explorer中右键单击项目,然后选择Build Path > Configure Build Path...。单击“添加外部JAR ...”按钮以添加五(5)个JAR。完成后,您的Java构建路径应如下所示

BuildPath.png

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



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



IntelliJ IDEA:从主菜单中选择File > Project Structure...。在“库”窗格中,单击“添加”(+)按钮,然后添加五(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));
}




揭露

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

关于java - 在不使用ODBC的情况下从Java操作Access数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61010213/

相关文章:

java - Ucanaccess_net.ucanaccess.jdbc.DBReference@ac6b76文件夹

java - 如何循环我的猜谜游戏?

java - 用多元素节点Java实现Btree

java - 无法生成新的日志文件?

ms-access - 有没有办法在Azure网站上使用MS Access DB(MDB文件)?

java - 插入数据时出现意外 token

java - 将多个面板和事件添加到GUI

sql-server - 根据ADO提供程序格式化日期

sql - SQL子查询与联接混淆

java - “UCanAccess:用户缺少特权或找不到对象”第二次连接