UcanaccessDriver 抛出 ExceptionInInitializerError 原因:java.lang.RuntimeException: org.hsqldb.jdbc.JDBCD

Posted

技术标签:

【中文标题】UcanaccessDriver 抛出 ExceptionInInitializerError 原因:java.lang.RuntimeException: org.hsqldb.jdbc.JDBCDriver【英文标题】:UcanaccessDriver throws ExceptionInInitializerError Caused by: java.lang.RuntimeException: org.hsqldb.jdbc.JDBCDriver 【发布时间】:2014-10-04 18:30:42 【问题描述】:

我检查了所有可能的地方,包括这个页面,但我在 Netbeans 8 和 Ucanaccess 上不断收到奇怪的错误。

这是我首先做的。导入 org-apache-commons-logging.jar、ucanaccess-2.0.9.jar、commons-lang-2.6.jar、hsqldb.jar、jackcess-2.0.4.jar 作为新驱动。

在Netbeans的options下设置类路径(添加ucanaccess.zip文件)

import sun.jdbc.odbc.JdbcOdbcDriver;
import net.ucanaccess.jdbc.UcanaccessDriver;
import java.sql.*;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
public class JavaApplication7 

static final String JDBC_DRIVER = "net.ucanaccess.jdbc.UcanaccessDriver";
static final String DB_URL = "jdbc:ucanaccess://C:\\Users\\Magneto\\Documents\\Database1.mdb";
static final String USER = "";
static final String PASS = "";
static final Scanner in = new Scanner(System.in);
//insert data variables
public JavaApplication7() throws SQLException 

public static void main(String[] args)

// databaseForm dbf = new databaseForm();
// dbf.setVisible(true);
 getDatabase();


public static void connectToDatabase()

try
System.out.println("Connection Successfull");
System.out.println("----------------------------------------------");

catch(Exception e)




public static void getDatabase()

try 
Class.forName(JDBC_DRIVER);
Statement statement = null;
Connection con = DriverManager.getConnection(DB_URL, "", "");
//execute a query
statement = con.createStatement();
String sql = "Select id, FirstName, LastName FROM PhoneBook";
ResultSet rs = statement.executeQuery(sql);
//pull database
while(rs.next())

int id = rs.getInt("id");
String FirstName = rs.getString("FirstName");
String LastName = rs.getString("LastName");

System.out.println("id " + id + " FirstName " + FirstName + " LastName " + LastName);   

rs.close();
con.close();
 catch (Exception ex) 
System.out.println("Got an Exception!");
System.err.println(ex.getMessage());


这是我不断收到的错误:

Exception in thread "main" java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:188)
at javaapplication7.JavaApplication7.getDatabase(JavaApplication7.java:54)
at javaapplication7.JavaApplication7.main(JavaApplication7.java:34)
Caused by: java.lang.RuntimeException: org.hsqldb.jdbc.JDBCDriver
at net.ucanaccess.jdbc.UcanaccessDriver.<clinit>(UcanaccessDriver.java:56)
... 4 more

Java 结果:1

【问题讨论】:

【参考方案1】:

异常源自net.ucanaccess.jdbc.UcanaccessDriver的类初始化器:

原因:java.lang.RuntimeException:org.hsqldb.jdbc.JDBCDriver

根据UCanAccess site,UCanAccess依赖于HSQLDBC:

依赖关系

UCanAccess 2.x.x 在您的类路径中需要(至少)以下依赖项:

jackcess-2.0.0.jar 或更高版本 commons-lang-2.4.jar commons-logging-1.0.4.jar hsqldb.jar(2.2.5)

您可能没有在应用程序的类路径中包含 HSQLDB 库。在 Netbeans 中定义驱动程序纯粹是为了使用 Netbeans 中的驱动程序,而不是为了应用程序的类路径。

正如 Gord Thompson 在下面的评论中提到的,设置 UCanAccess 的解释可以在这个问题中找到:Manipulating an Access database from Java without ODBC

【讨论】:

+1 请参阅我的问答here 了解分步说明。

以上是关于UcanaccessDriver 抛出 ExceptionInInitializerError 原因:java.lang.RuntimeException: org.hsqldb.jdbc.JDBCD的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate - 使用 net.ucanaccess.jdbc.UcanaccessDriver 时出现 org.hibernate.MappingException

java.lang.ClassNotFoundException:net.ucanaccess.jdbc.ucanaccessDriver

python中用来抛出异常的关键字是

c# throw的用法

python 异常

验证 Auth0 令牌 - Spring Security