java .lang.NoClassDefFoundError при подключении к встроенной базе данных Derby - PullRequest
1 голос
/ 12 марта 2020

Я использую Apache IDE NetBeans 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();
        }
    }

}

Я не знаю, что идет не так. Я думаю, что я не настроил базу данных должным образом, но я не уверен. Я новичок в дерби и встроенных базах данных. Раньше использовал 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

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Как подсказывает Марк Роттвил в комментариях, добавление derbyshared.jar вместе с derby.jar и derbytools.jar к зависимостям сработало, и я больше не получаю эту ошибку. Я очень очень ценю его помощь. Спасибо.

0 голосов
/ 12 марта 2020

Убедитесь, что вы добавили в свой проект (как зависимость) флягу для драйвера Apache derby JDB C, которую можно скачать здесь: http://db.apache.org/derby/derby_downloads.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...