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

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

参考文献:

在没有ODBC的情况下从Java操作Access数据库

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.(GreatBeyond.java:36) at GreatBeyond.main(GreatBeyond.java:66) Caused by: java.lang.RuntimeException: org.hsqldb.jdbc.JDBCDriver at net.ucanaccess.jdbc.UcanaccessDriver.(UcanaccessDriver.java:54) ... 4 more 

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

如果您不使用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 -cp条目将用冒号(:)代替分号( ; ),文件路径会有所不同。)

另一种可能性是使用与上面的-cp选项相同的条目定义CLASSPATH环境变量,因此您不必每次都使用-cp