2017-07-04 2 views
0

Beim Versuch, in einer lokalen Datenbank mit einer Dateieigenschaft mithilfe von JDBC und Apache Derby zu verbinden, erhalte ich die folgende Ausnahme:zu JDBC Anschluss

java.sql.SQLException: Database 'Mobsters' not found. 
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) 
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) 
at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source) 
at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source) 
at org.apache.derby.impl.jdbc.EmbedConnection.newSQLException(Unknown Source) 
at org.apache.derby.impl.jdbc.EmbedConnection.handleDBNotFound(Unknown Source) 
at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source) 
at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source) 
at org.apache.derby.jdbc.InternalDriver$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at org.apache.derby.jdbc.InternalDriver.getNewEmbedConnection(Unknown Source) 
at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source) 
at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source) 
at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source) 
at java.sql.DriverManager.getConnection(DriverManager.java:664) 
at java.sql.DriverManager.getConnection(DriverManager.java:208) 
at com.adrian.mobsters.gui.controllers.MainController.getDBConnection(MainController.java:401) 
at com.adrian.mobsters.gui.controllers.MainController$2.call(MainController.java:388) 
at com.adrian.mobsters.gui.controllers.MainController$2.call(MainController.java:376) 
at javafx.concurrent.Task$TaskCallable.call(Task.java:1423) 
at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
at java.lang.Thread.run(Thread.java:748) 
Caused by: ERROR XJ004: Database 'Mobsters' not found. 
    at org.apache.derby.iapi.error.StandardException.newException(Unknown Source) 
    at org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(Unknown Source) 
    ... 22 more 

ich eine Eigenschaft bin mit file:

create=true 
databaseName=Mobsters 
user=myuser 
password=mypw! 
shutdown=true 

Ich weiß, dass die Datenbank nicht existiert. Sollte dies nicht die Datenbank erstellen? Dies ist eine eingebettete Anwendungsdatenbank, die erstellt werden sollte, wenn sie nicht existiert.

Code Setup Datenbankverbindung verwendet:

public void initializeDB() { 
    Task<Void> task = new Task() { 
     @Override 
     protected Void call() throws Exception { 
      Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); 
      Properties properties = loadDBProperties(); 
      // Decide on the db system directory: <userhome>/.addressbook/ 
      String userHomeDir = System.getProperty("user.home", "."); 
      String systemDir = userHomeDir + "/.mobsters"; 
      new File(systemDir).mkdir(); 
      // Set the db system directory. 
      System.setProperty("derby.system.home", systemDir); 

      getDBConnection(properties); 

      MobsterDBUtils.createMobsterTable(getDBConnection()); 
      return null; 
     } 
    }; 

    new Thread(task).start(); 
} 

public void getDBConnection(Properties properties) { 
    String url = "jdbc:derby:"; 
    try { 
     connection.set(DriverManager.getConnection(url, properties)); 
    } catch (SQLException ex) { 
     Logger.getLogger(MainController.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

public Properties loadDBProperties() { 
    Properties prop = new Properties(); 

    InputStream is = MainController.class.getResourceAsStream("/derby/DerbyConfig.properties"); 

    try { 
     prop.load(is); 
    } catch (IOException ex) { 
     Logger.getLogger(MainController.class.getName()).log(Level.SEVERE, null, ex); 
    } 

    return prop; 
} 

Soweit ich weiß, ist die Eigenschaften-Datei richtig importiert werden:

enter image description here

(dies ist nicht vertrauliche Login-Daten)

+1

FYI. Keine der Antworten sind Antworten, sie sollten gelöscht werden. Gangster! = Gangster. Versuchen Sie, denselben Fall zu verwenden. Wenn "Mafiosi" auf irgendeinen Speicherort abgebildet werden, könnte es die Groß-/Kleinschreibung beachten. Wenn das funktioniert, werde ich es als Antwort posten – efekctive

+0

@efekctive das Problem war shutdown = true sollte nur hinzugefügt werden, wenn die Verbindung geschlossen wird. Dies könnte jedoch die Antwort auf mein anderes Problem sein: Die Datenbank speichert nicht, initialisiert aber. –

Antwort

0

Durch Hinzufügen von shutdown=true zur URL wird die Verbindung getrennt. Wenn diese Eigenschaft hinzugefügt wird, wird die Datenbank nicht erstellt. Dies sollte verwendet werden, wenn Sie mit der Datenbankverbindung fertig sind.

+0

Können Sie auf Derby-Dokumente verweisen, die dies bestätigen? –

+0

@ abhijit-sarkar Also, ja Autor hat Recht, wenn diese Eigenschaft gefunden wird, debry wird versuchen, db herunterzufahren, statt neue zu erstellen. Siehe dazu unter https://db.apache.org/derby/docs/10.13/ref/rrefattrib16471.html – Batiaev

+0

@Batiaev Die URL, die du verlinkt hast, hat nichts mit dem Erstellen einer DB zu tun, sondern erklärt nur was das 'shutdown' ist Parameter tut es. –