问题描述
我在嵌入式模式下使用Apache NetBeans IDE 11.3(带有JDK 13)和Derby.连接到数据库时出现以下错误:
I'm using Apache NetBeans IDE 11.3 (with JDK 13) and Derby in Embedded Mode. I am getting the following error while connecting to the database:
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,但要容易得多.任何帮助将不胜感激.
I don't know what goes wrong. I think I've not setup the database properly but I'm not sure. I'm new to Derby and Embedded Databases. Used MySQL before but it was a lot easier. Any help will be appreciated.
更新:
我看到我以前没有将derby.jar添加到依赖项中(我只是在使用derbytools.jar),所以我添加了它,现在出现以下错误:
I saw that I didn't add 'derby.jar' to the dependencies before (I was just using 'derbytools.jar'), so I added it and now I'm getting the following error:
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.jar
和 derbytools.jar
一起添加到依赖项中,并且我不再遇到该错误.我非常感谢他的帮助.谢谢.
As suggested by Mark Rotteveel in the comments, adding derbyshared.jar
along with derby.jar
and derbytools.jar
to the dependencies worked and I'm no longer getting that error. I very very much appreciate his help. Thank you.
这篇关于连接到嵌入式Derby数据库时出现java.lang.NoClassDefFoundError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!