连接到嵌入式 Derby 数据库时出现 java.lang.NoClassDefFoundError

标签 java jdbc netbeans derby embedded-database

我正在嵌入式模式下使用 Apache NetBeans IDE 11.3(带有 JDK 13)和 Derby。连接数据库时出现以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/derby/iapi/jdbc/JDBCBoot
    at org.apache.derby.jdbc.EmbeddedDriver.<clinit>(EmbeddedDriver.java:95)
    at Testing.testConnection.main(testConnection.java:15)
Caused by: java.lang.ClassNotFoundException: org.apache.derby.iapi.jdbc.JDBCBoot
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 2 more

代码如下:

package Testing;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.apache.derby.jdbc.EmbeddedDriver;

public class testConnection {

    public static void main(String[] args) {

        try {
            DriverManager.registerDriver(new EmbeddedDriver());

            Connection con = DriverManager.getConnection("jdbc:derby:testdb;create=true");
            Statement stmt = con.createStatement();

            stmt.execute("create table test(id int(2) primary key, name varchar not null);");
            stmt.execute("insert into test values (01, 'Jeff'), (02, 'Clint'), (03, 'Mike');");

            ResultSet rs = stmt.executeQuery("select * from test;");

            while (rs.next()) {
                System.out.println(rs.getString("id") + "\t" + rs.getString("name"));
            }

            DriverManager.getConnection("jdbc:derby:;shutdown=true");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}

我不知道出了什么问题。我想我没有正确设置数据库,但我不确定。我是 Derby 和嵌入式数据库的新手。以前用过MySQL,但是方便多了。任何帮助将不胜感激。

更新:

我发现我之前没有将“derby.jar”添加到依赖项中(我只是使用“derbytools.jar”),所以我添加了它,现在出现以下错误:

java.lang.NoClassDefFoundError: org/apache/derby/shared/common/security/SystemPermission
    at org.apache.derby.iapi.jdbc.JDBCBoot.boot(JDBCBoot.java:93)
    at org.apache.derby.iapi.jdbc.JDBCBoot.boot(JDBCBoot.java:68)
    at org.apache.derby.jdbc.EmbeddedDriver.<clinit>(EmbeddedDriver.java:95)
    at Testing.testConnection.main(testConnection.java:15)
Caused by: java.lang.ClassNotFoundException: org.apache.derby.shared.common.security.SystemPermission
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 4 more

最佳答案

根据Mark Rotteveel的建议在评论中,将 derbyshared.jar 以及 derby.jarderbytools.jar 添加到依赖项中是有效的,我不再收到该错误。我非常非常感谢他的帮助。谢谢。

关于连接到嵌入式 Derby 数据库时出现 java.lang.NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60649262/

相关文章:

java - 使用 jdbctemplate 将查询中的数据保存在模型中

JavaFX2 将 launch4j 包装为 Maven 插件

java - JDBC 如何知道到哪里寻找驱动程序类?

java - 从 PL/pgSQL 函数返回行

netbeans - 推荐的 NetBeans UML 插件

java - 从 XML 文件中删除元素 Java

java - Presto + query.max-memory-per-node 配置

java:有纪元时间,打印多长时间前发生的时间/天/周

java.sql.SQLException : No suitable driver found for jdbc:mysql://localhost:3306/db 异常

java - 如何将 javax.comm API 导入 Netbeans IDE?