2016-12-15 14 views
0

Основных части Кодекса:
(Взято из примера из книги: Java Программирование 10-й изда, Автор: Paul Deitel Харви Дейтель (р 1063).):Нет подходящего драйвера найден для JDBC: дерби: <db-name> ошибки JDBC с Java DB на Linux/Ubuntu

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 

public class DisplayAuthors 
{ 
    public static void main(String args[]) 
    { 
     final String DATABASE_URL = "jdbc:derby:books"; 

     try ( 
       Connection connection = 
       DriverManager.getConnection(DATABASE_URL, "user", "pass"); 
      ) 
     { 
      // ... 
     } 
     catch (SQLException sqlException)         
     {                 
      sqlException.printStackTrace(); 
     }             
    } 
} 

Я на Ubuntu 16,04

Хотя сайт Java для Java DB говорит дб включен в JDK, я узнал после нескольких часов веб ищет, что openJDK java, рекомендуется установить на Ubuntu, не поставляется с java db.

The website, что было, что полезную информацию предложил запустить:

sudo apt-get install sun-javadb-client sun-javadb-core 

который произвел ошибку и не были установлены.

Поэтому я загрузил jdk-8u111-linux-x64.tar.gz, извлеченный в соответствии с инструкциями, и просто чтобы быть в безопасности (я считаю, что я мог бы просто установить JAVA_HOME, DERBY_HOME в извлеченное местоположение и который сделал " работал над «до ij-частями» (см. ниже)), удалил все из моего/usr/lib/jvm/java-8-openjdk-amd64/и заменил содержимое того, что я загрузил.

И добавил это в моем .bashrc:

JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ 
DERBY_HOME=/usr/lib/jvm/java-8-openjdk-amd64/db 
export DERBY_HOME 

Поступил в терминале для создания базы данных и вставки данных, как указано в книге:

$JAVA_HOME/db/bin/ij 
connect 'jdbc:derby:books;create=true;user=usr;password=pass'; 
run 'book-basic-table-create-and-insertions.sql'; 
exit; 

Это создает файл книги с БД информации +/данных внутри него.

В ./ есть также файл с именем derby.log, который содержит следующие информацию:

---------------------------------------------------------------- 
Wed Dec 14 19:01:58 EST 2016: 
Booting Derby version The Apache Software Foundation - Apache Derby - 10.11.1.2 - (1629631): instance a816c00e-0158-ffc9-1471-000006d047c8 
on database directory /tmp/deleteme-IuI/books with class loader [email protected] 
Loaded from file:/usr/lib/jvm/java-8-openjdk-amd64/db/lib/derby.jar 
java.vendor=Oracle Corporation 
java.runtime.version=1.8.0_111-b14 
user.dir=/tmp/deleteme-IuI 
os.name=Linux 
os.arch=amd64 
os.version=4.4.0-53-generic 
derby.system.home=null 
Database Class Loader started - derby.database.classpath='' 
---------------------------------------------------------------- 
Wed Dec 14 19:04:25 EST 2016: Shutting down Derby engine 
---------------------------------------------------------------- 
Wed Dec 14 19:04:27 EST 2016: 
Shutting down instance a816c00e-0158-ffc9-1471-000006d047c8 on database directory /tmp/deleteme-IuI/books with class loader [email protected] 
---------------------------------------------------------------- 

Составитель и побежал:

javac DisplayAuthors.java # compiles without error 
java DisplayAuthors 

выходы программы:

java.sql.SQLException: No suitable driver found for jdbc:derby:books 
at java.sql.DriverManager.getConnection(DriverManagerager.java:689) 
at java.sql.DriverManager.getConnection(DriverManager.javaava:247) 
at DisplayAuthors.main(DisplayAuthors.java:15) 

Как заставить программу работать?

+0

*/USR/Библиотека/JVM/Java-8-OpenJDK-amd64/дб/Библиотека/derby.jar * (плюс другие) должны быть в вас classpath –

+0

Вы можете использовать Eclipses, другую IDE или проект Maven, чтобы более легко получить зависимости вашего драйвера базы данных. –

+0

@ScaryWombat Я попытался: 'java DisplayAuthors -cp/usr/lib/jvm/java-8-openjdk-amd64/db/lib/derby.jar', который произвел ту же ошибку. –

ответ

0

Вы пропускаете раздел драйвера нагрузки кода

например

String driver = "org.apache.derby.jdbc.EmbeddedDriver"; 
... 
try { 
    Class.forName(driver); 
} catch(java.lang.ClassNotFoundException e) { 
    ... 
} 

см http://docs.oracle.com/javadb/10.8.3.0/getstart/rwwdactivity3.html для примера

Редактировать

В качестве доказательства я сделал следующее

  1. создать простой проект Java в Eclipse,
  2. добавить derby.jar , derbynet.jar & derbyclient.джэт к пути к классам

Мой код

public static void main(String[] args) { 

    String driver = "org.apache.derby.jdbc.EmbeddedDriver"; 
    try { 
     Class.forName(driver); 
    } catch(java.lang.ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 

    final String DATABASE_URL = "jdbc:derby:myDB;create=true;user=user;password=pass"; 

    try ( 
      Connection connection = DriverManager.getConnection(DATABASE_URL, "user", "pass"); 
     ) 
    { 
     // ... 
    } 
    catch (SQLException sqlException)         
    {                 
     sqlException.printStackTrace(); 
    }   

} 

Это работает без исключений

+0

Это кажется, не работать, даже более длинное сообщение об ошибке с фиксацией трассировки стека: java.lang.ClassNotFoundException ... java.sql.SQLException: Нет подходящего драйвера найден для JDBC: Derby: книги –

+0

Мой код делает не упоминать 'jdbc: derby: books'. Вы называете мой код ** до ** вашего кода? Вы посмотрели ссылку, которую я вам дал? Вы используете встроенный db? –

+0

да, я называю ваш код перед моим. Я очень новичок в базе данных, я не уверен, что я использую, просто следуя книге (хотя она должна быть встроена, если она есть - в отличие от сервера (?)), Код на посту и шаг, как я о котором я упоминал, это все, что у меня есть. –

 Смежные вопросы

  • Нет связанных вопросов^_^