Ошибка базы данных не найдена при подключении к сетевому серверу Derby

У меня проблемы с инициализацией сетевого сервера javadb и установкой подключения к нему. Это программа JavaFX.

Это то, что у меня есть до сих пор:

try {
        Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
        javadbserver = new NetworkServerControl();
        javadbserver.start(null);
    } catch (ClassNotFoundException e) {
        Logger.getLogger(MainGuiController.class.getName()).log(Level.SEVERE, null, ex);
        System.out.println("Where is your JavaDB embedded Driver?");
        return;
    }

    String dbName = "mydb";
    String dbUser = "auser";
    String dbPass = "password";

    PreparedStatement prepstmt;

    try {
        this.conn = DriverManager.getConnection("jdbc:derby://localhost:1527/mydb;user=auser;password=password");
        System.out.println("Went through!");
    } catch (SQLException ex) {
        Logger.getLogger(MainGuiController.class.getName()).log(Level.SEVERE, null, ex);
    }

Я всегда ловлю второе исключение.

Если я щелкну правой кнопкой мыши службу javadb в netbeans и выберу соединение, все будет работать гладко. [На самом деле было бы неплохо узнать, какой код или программа Java запускается в фоновом режиме, когда я выбираю это]

В списке моих проектов в библиотеках я вижу derby.jar, derbyclient.jar и derbynet.jar.

Что я делаю неправильно? Пожалуйста помоги!

Вот ошибка, которую я получаю

java.sql.SQLNonTransientConnectionException: The connection was refused because the database mydb was not found.
    at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
    at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
    at org.apache.derby.jdbc.ClientDriver.connect(Unknown Source)
    at java.sql.DriverManager.getConnection(DriverManager.java:579)
    at java.sql.DriverManager.getConnection(DriverManager.java:243)
    at mydb.MainGuiController.initialize(MainGuiController.java:105)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2152)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2028)
    at mydb.mydb.start(mydb.java:37)
    at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:319)
    at com.sun.javafx.application.PlatformImpl$5.run(PlatformImpl.java:215)
    at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:179)
    at com.sun.javafx.application.PlatformImpl$4$1.run(PlatformImpl.java:176)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:176)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29)
    at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:73)
    at java.lang.Thread.run(Thread.java:722)
Caused by: org.apache.derby.client.am.DisconnectException: The connection was refused because the database mydb was not found.
    at org.apache.derby.client.net.NetConnectionReply.parseRDBNFNRM(Unknown Source)
    at org.apache.derby.client.net.NetConnectionReply.parseAccessRdbError(Unknown Source)
    at org.apache.derby.client.net.NetConnectionReply.parseACCRDBreply(Unknown Source)
    at org.apache.derby.client.net.NetConnectionReply.readAccessDatabase(Unknown Source)
    at org.apache.derby.client.net.NetConnection.readSecurityCheckAndAccessRdb(Unknown Source)
    at org.apache.derby.client.net.NetConnection.flowSecurityCheckAndAccessRdb(Unknown Source)
    at org.apache.derby.client.net.NetConnection.flowUSRIDPWDconnect(Unknown Source)
    at org.apache.derby.client.net.NetConnection.flowConnect(Unknown Source)
    at org.apache.derby.client.net.NetConnection.<init>(Unknown Source)
    at org.apache.derby.client.net.NetConnection40.<init>(Unknown Source)
    at org.apache.derby.client.net.ClientJDBCObjectFactoryImpl40.newNetConnection(Unknown Source)

person Nepze Tyson    schedule 29.06.2013    source источник
comment
Вы просто проглатываете исключение! По крайней мере, напечатайте трассировку стека, если вы не собираетесь обрабатывать или уклоняться от нее. Как только вы получите трассировку стека и все еще не уверены, что происходит, включите ее в свой вопрос.   -  person ikumen    schedule 29.06.2013
comment
Ага. как глупо с моей стороны. Вопрос отредактирован   -  person Nepze Tyson    schedule 29.06.2013


Ответы (2)


Судя по URL-адресу JDBC, вы пытаетесь подключиться к серверу Derby, а не к встроенному экземпляру. Если вы пытаетесь подключиться к экземпляру сервера, вот несколько соображений:

  • вы сами запускали сервер, mydb уже существует?
  • если нет, правильно ли вы передали параметры для создания (например, ;create=true) example: jdbc:derby://localhost:1527/dbname;create=true
  • if mydb did exists, are you pointing the server to the correct location?
    • also, depending on what was used to start derby (e.g. embedded vs network driver) default database locations are different as well. You can read about it here

По сути, исключение, которое вы получаете, заключается в том, что Derby говорит, что не может найти вашу базу данных - в основном это проблема пути.

person ikumen    schedule 29.06.2013
comment
да. Глупый глупый я! Я забыл указать полный путь, потому что я забыл, что по умолчанию в Windows находится под C:/users/myUserName/.netbeans-derby/mydb - person Nepze Tyson; 29.06.2013

Если вы используете netbeans, вы должны исправить это, зайдя в свойства соединения и добавив свойство. Под «свойством» введите «создать», а под «значением» введите «true».

person SanchelliosProg    schedule 23.07.2015