【问题标题】:UCanAccess Initializer Error (compile/run without IDE)UCanAccess 初始化程序错误(编译/运行没有 IDE)
【发布时间】:2015-12-11 00:13:11
【问题描述】:

我一直在尝试创建一个新项目以使用 UCanAccess 读取 MS Access 文件。我一直在关注来自@Gord Thompson 的信息以及 github 中用于 UCanAccess 的示例文件。排除我使用不同名称的事实,每件事都是一样的。我不使用任何 GUI IDE。我只是从命令行编译,基本上,我编写了一个进行命令行编译的 Java 程序。

参考资料:

Manipulating an Access database from Java without ODBC

https://github.com/andrew-nguyen/ucanaccess/blob/master/example/net/ucanaccess/example/Example.java

我的代码示例如下:

String path = new java.io.File(PATH).getAbsolutePath();
db = "jdbc:ucanaccess://" + path;
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
Connection conn = DriverManager.getConnection( db );
Statement s = conn.createStatement();

我的错误信息是:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at GreatBeyond.<init>(GreatBeyond.java:36)
    at GreatBeyond.main(GreatBeyond.java:66)
Caused by: java.lang.RuntimeException: org.hsqldb.jdbc.JDBCDriver
    at net.ucanaccess.jdbc.UcanaccessDriver.<clinit>(UcanaccessDriver.java:54)
    ... 4 more

第 36 行是“Class.forName”,我尝试在没有它的情况下运行程序,但它失败了。我已经下载了 UCanAccess 的 zip 文件并将其解压缩到 com 目录,Jackcess 被解压缩到 net 目录。谁能指出出了什么问题?

【问题讨论】:

  • 我不知道 UCanAccess,但它似乎正在寻找一个(缺少的)HSQL 数据库驱动程序。您要么需要配置一些东西,要么将驱动程序 jar 添加到您的类路径中。
  • 'PATH' 来自哪里?请注意数据库路径需要传递到连接字符串,而不是脚本路径。

标签: java jdbc ucanaccess


【解决方案1】:

如果您没有使用 IDE,那么您需要为 UCanAccess 的 JAR 文件及其所有依赖项(HSQLDB、Jackcess 等)指定 CLASSPATH 条目。一种方法是在运行代码时使用java 命令的-cp 选项。

例如,我在“UcaNoIde.java”中编译了以下代码后...

import java.sql.*;

public class UcaNoIde {

    public static void main(String[] args) {
        String dbFileSpec = "C:/Users/Public/UCanAccessTest.accdb";
        String connStr = "jdbc:ucanaccess://" + dbFileSpec;
        try (Connection conn = DriverManager.getConnection(connStr)) {
            System.out.println("Connection established.");
        } catch (Exception e) {
            e.printStackTrace(System.err);
        }
    }

}

... 到“UcaNoIde.class”文件中,我可以在 Windows 命令提示符下使用以下命令运行它:

java -cp .;C:/Users/Public/Downloads/UCanAccess/ucanaccess-3.0.3.jar;C:/Users/Public/Downloads/UCanAccess/lib/commons-lang-2.6.jar;C:/Users/Public/Downloads/UCanAccess/lib/commons-logging-1.1.1.jar;C:/Users/Public/Downloads/UCanAccess/lib/hsqldb.jar;C:/Users/Public/Downloads/UCanAccess/lib/jackcess-2.1.3.jar UcaNoIde

(对于 Linux,et.al. -cp 条目将用冒号 (:) 而非分号 (;) 分隔,并且文件路径会有所不同.)

另一种可能性是使用与上述-cp 选项中相同的条目定义一个CLASSPATH 环境变量,这样您就不必每次都使用-cp

【讨论】:

  • 谢谢@Gord Thompson。我能够让它工作。祝你有美好的一天。
猜你喜欢
  • 2011-05-26
  • 1970-01-01
  • 2014-06-19
  • 2012-11-05
  • 2017-01-15
  • 2011-09-02
  • 2019-07-10
  • 1970-01-01
相关资源
最近更新 更多