2016-10-19 4 views
0

Я следую за Java: как программировать - глава 24. В этой главе рассматривается реализация базы данных на Java. Я выполнил шаги по настройке «Derby», но получаю ошибку java.sql.SQLException: Database 'books' not found..Настройка Derby на MacOS Sierra

Я проверил $ ​​PATH, чтобы убедиться, что он включает в себя $ DERBY_HOME. $ DERBY_HOME указывает на правильную папку (/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/db).

Я проверил $ ​​JAVA_HOME, и он также был настроен правильно (/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home).

Я могу использовать инструмент ij, и он показывает мне базу данных, которая настроена. Я добавил derby.jar к пакету в eclipse. Ниже приведен код из книги, но когда я его компилирую, я получаю сообщение об ошибке java.sql.SQLException: Database 'books' not found.

Я посмотрел его онлайн, и были рекомендации, которые я добавляю //localhost:1527/books. Но если я добавлю, что получаю ошибку java.sql.SQLException: No suitable driver found for jdbc:derby://localhost:1527/books.

Были также предложения, что я использую Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();, что также не решило проблему.

У меня есть копия/вставка базы данных books.sql в том же пакете, что и тот, который содержит исходный код.

Кто-нибудь знает, как решить проблему? Я бегу MacOS Sierra.

public class DisplayAuthors { 

    public static void main(String [] args) { 
     final String DATABASE_URL = "jdbc:derby:books"; 
     final String SELECT_QUERY = "Select authorID, firstName, lastName from authors"; 


     try( 
       Connection connection = DriverManager.getConnection(
       DATABASE_URL, "deitel", "deitel"); 
       Statement statement = connection.createStatement(); 
       ResultSet resultSet = statement.executeQuery(SELECT_QUERY)){ 

      ResultSetMetaData metaData = resultSet.getMetaData(); 
      int numberOfCols = metaData.getColumnCount(); 

      System.out.printf("Authors of table of Books databse:%n%n"); 
      for(int i = 0; i < numberOfCols; i++) 
       System.out.printf("%-8s\t",metaData.getColumnName(i)); 

      System.out.println(); 

      while(resultSet.next()){ 
       for (int i = 1; i <= numberOfCols; i++) 
        System.out.printf("%-8s\t",resultSet.getObject(i)); 
        System.out.println(); 
      } 

     }catch(SQLException ex){ 
      ex.printStackTrace(); 
     } 
    } 
} 
+0

Это не проблема с кодом. Вам просто нужно создать базу данных. Посмотрите на инструкцию execute() и инструкцию CREATE TABLE ddl. –

+0

@ChrisGerken база данных уже создана. Я могу видеть все данные, которые находятся в базе данных через командную строку (инструмент ij). – fafinu

+0

@ChrisGerken спасибо, я подумал, что проблема с базой данных. Я создал базу данных, но расположение было другим. Догадаться. – fafinu

ответ

0

Я понял, проблема была. При создании базы данных через ij я должен был находиться в том же каталоге, что и исходный файл. Теперь под затмением я подумал, что это будет означать, что мне нужно находиться под папкой пакета (JAVAProject/src/package), но это было неправильно. Я должен был находиться под (JAVAProject).