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
。