Я следую за 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();
}
}
}
Это не проблема с кодом. Вам просто нужно создать базу данных. Посмотрите на инструкцию execute() и инструкцию CREATE TABLE ddl. –
@ChrisGerken база данных уже создана. Я могу видеть все данные, которые находятся в базе данных через командную строку (инструмент ij). – fafinu
@ChrisGerken спасибо, я подумал, что проблема с базой данных. Я создал базу данных, но расположение было другим. Догадаться. – fafinu