UCanAccess初始化程序错误(无IDE编译/运行)

时间:2015-12-11 00:13:12

标签: java jdbc ucanaccess

我一直在尝试创建一个新项目来使用UCanAccess来读取MS Access文件。我一直在关注@Gord Thompson的信息和ganub中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目录。任何人都可以指出出了什么问题吗?

1 个答案:

答案 0 :(得分:2)

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

例如,在我编译以下代码后,&#34; UcaNoIde.java&#34; ...

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);
        }
    }

}

...进入&#34; UcaNoIde.class&#34;文件我可以在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