Я пытаюсь настроить базу данных Java DB для класса программирования. Я следую инструкциям из учебника Deitel и Deitel:

У меня установлен JDK11.8.0_112. Я использую Windows 10.

Моя установка находится в C: \ Program Files \ Java \ jdk1.8.0_112 У меня есть переменная JAVA_HOME, установленная как C: \ Program Files \ Java \ jdk1.8.0_112

В учебнике говорится, что нужно перейти в папку установки db \ bin и отредактировать файл setEmbeddedCP.bat с @rem set DERBY_INSTALL = на @SET DERBY_INSTALL =% JAVA_HOME% \ db

Затем откройте командную строку, перейдите в каталог этого файла и запустите его, что я и сделал, вот результат: введите описание изображения здесь

В книге есть исходный код для создания таблиц. Я скопировал и вставил в свой собственный проект C: \ Users \ hulbe \ OneDrive \ Documents \ NetBeansProjects \ DisplayAuthors \ build \ classes \ displayauthors.

Затем в книге говорится, что нужно использовать командную строку и менять каталоги на папку с примерами глав, которые теперь находятся в моем собственном проекте.

Затем введите в командной строке "% JAVA_HOME% \ db \ bin \ ij".

Затем подключите 'jdbc: derby: newbooks; create = true; user = xxx; password = xxx'; У меня есть БД и таблицы для создания (я думаю). Но когда я запускаю код, я получаю «java.sql.SQLException: не найдено подходящего драйвера для jdbc: derby: newbooks».

Я действительно в своем уме. Я потратил два дня, пытаясь настроить чистую установку, и прошел через то, как настроены книги.

Вот код: `try (Connection connection = DriverManager.getConnection (DATABASE_URL," deitel "," deitel ");

        Statement statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery(SELECT_QUERY)) {
        
        ResultSetMetaData metaData = resultSet.getMetaData();
        int numberOfColumns = metaData.getColumnCount();
        
        System.out.printf("Authors Table of Books Database: %n%n");
        
        for (int i = 1; i  <= numberOfColumns; i++) {
            System.out.printf("%-8s\t", resultSet.getObject(i));
        }
    }
    catch (SQLException sqlException) {
        sqlException .printStackTrace();
    }`

Я знаю, что это долго, и я уверен, что это подпадает под уже задаваемые вопросы, но ничего из того, что я видел, не помогает мне понять это.

Кто-нибудь знает, что я делаю не так?

РЕДАКТИРОВАТЬ: Проблема заключалась в том, что мне пришлось извлечь файлы derby.jar и добавить их вручную, спасибо Марко Тиццано.

Однако теперь я получаю эту ошибку: java.sql.SQLException: «Книги» базы данных не найдены. в org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException (Неизвестный источник) в org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException (Неизвестный источник) в org.apache.derby.impl.jdbc.Util.generateCenerate (Неизвестный источник) на org.apache.derby.impl.jdbc.Util.generateCsSQLException (Неизвестный источник) на org.apache.derby.impl.jdbc.EmbedConnection.newSQLException (Неизвестный источник) на org.apache.derby.impl.jdbc .EmbedConnection.handleDBNotFound (Неизвестный источник) в org.apache.derby.impl.jdbc.EmbedConnection. (Неизвестный источник) в org.apache.derby.jdbc.InternalDriver $ 1.run (Неизвестный источник) в org.apache.derby.jdbc .InternalDriver $ 1.run (Неизвестный источник) в java.security.AccessController.doPrivileged (Собственный метод) в org.apache.derby.jdbc.InternalDriver.getNewEmbedConnection (Неизвестный источник) в org.apache.derby.jdbc.InternalDriver.connect ( Неизвестный источник) на org.apache.derby.jdbc.InternalDriver.connect (Неизвестный источник) на org.apache.derby.jdbc.AutoloadedDriver.connect (Неизвестный источник) на java.sq l.DriverManager.getConnection (DriverManager.java:664) в java.sql.DriverManager.getConnection (DriverManager.java:247) в displayauthors.DisplayAuthors.main (DisplayAuthors.java:24) Причина: ОШИБКА База данных XJ004: 'книги' не найден.

РЕДАКТИРОВАТЬ 2: Я думаю, что создавал БД в неправильном каталоге, я переписал его в правильный каталог, ProjectName-> src-> proejctname. В командной строке отображались все необходимые данные SQL, создание таблиц, имена столбцов и т. Д., А затем выполнялись вставки. Это также создало папку в этом каталоге с именем db, но все же ошибка DB не найдена.

2
Vikingord 3 Май 2021 в 02:58

1 ответ

Если вы запускаете свой код в Netbeans, проблема в том, что JVM не может найти драйверы для Apache Derby, которые обычно (из JDBC 4.0+) автоматически загружаются из пути к классам.
Имейте в виду, что для успешного подключения к базе данных, прежде всего, файлы драйвера поставщика БД (в данном случае derby.jar , derbytools.jar и derbyoptionaltools.jar ) должны присутствовать в CLASSPATH, и на самом деле это именно то, к чему вы писали в книге при создании базы данных.
Итак, в вашем случае вам нужно добавить эти библиотеки в зависимости проекта.
Я никогда не использовал Netbeans, но этот ответ вам поможет: Как мне установить путь к классам в NetBeans?

Я сообщаю здесь шаги, которые необходимо сделать:

  1. Щелкните правой кнопкой мыши свой проект.
  2. Выберите Properties.
  3. Слева нажмите Libraries.
  4. На вкладке "Компиляция" нажмите кнопку Add Jar/Folder.

Или же

  1. Расширьте свой проект.
  2. Щелкните правой кнопкой мыши Libraries.
  3. Выберите Add Jar/Folder.
2
Marco Tizzano 3 Май 2021 в 00:23