Zum Inhalt springen

Java 7 Application mit Embedded Derby DB


String

Empfohlene Beiträge

Hallo Leute,

lange Zeit war ich nicht am programmieren, dass hat sich jetzt jedoch geändert ;)

Ich arbeite gerade an einer kleinen Software, welche meine angegebenen Verzeichnisse durchsucht und mir alle gefundenen mp3 Dateien in eine Datenbank schreibt. Kein Problem, alles funktioniert.

Nun möchte ich diese Software jedoch weitergeben und habe das "Problem", dass ich ja meine Derby Datenbank jedes Mal vor dem Benutzen der Software über die IDE NetBeans starten bzw verbinden muss.

Wie kann ich es realisieren, dass dies automatisch in meinem Programm geschieht und der User einfach nur das Programm startet und loslegt?


    private static void check() {

        try {

            Class.forName("org.apache.derby.jdbc.EmbeddedDriver");

        } catch (ClassNotFoundException e) {

            System.out.println("Class not found " + e);

        }


        try {

            con = DriverManager.getConnection(DB_NAME, DB_USER_NAME, DB_USER_PW);

            isChecked = true;

        } catch (SQLException ex) {

            System.out.println("Verbindung konnte nicht aufgebaut werden: " + ex);

        }

    }

So sieht es bisher aus und wie gesagt es funktioniert, jedoch nur wenn ich die DB in NetBeans starte/verbinde.

Vielen Dank für eure Hilfe!:)

The String

Link zu diesem Kommentar
Auf anderen Seiten teilen

Guten Morgen,

vielen Dank für deine Antwort.

Mein DB_NAME wird wie folgt deklariert:


private static String DB_NAME = "jdbc:derby://localhost:1527/db_musikbox;create=true";    // Datenbankname

Ich hatte das "create=true" nicht drin, jedoch habe ich es gleich ausprobiert. Wenn ich dann mein Programm über "CLear and Build" kompiliere werden die Dateien im "dist"-Ordner aktualisiert. Öffne ich das aktualisierte Programm passiert leider das Gleiche wie vorher, nämlich gar nichts :( Öffne ich das Programm in der IDE OHNE die Datenbank zu verbinden, kommt folgend Fehlermeldung:

java.sql.SQLNonTransientConnectionException: java.net.ConnectException: Fehler beim Herstellen der Verbindung zum Server localhost am Port 1527. Nachricht: Connection refused.

Vielleicht hilft es ja.

Link zu diesem Kommentar
Auf anderen Seiten teilen

So ich habe nun herausgefunden, dass mein DB_NAME wohl falsch aufgebaut war:

alt:


private static String DB_NAME = "jdbc:derby://localhost:1527/db_musikbox;create=true";    // Datenbankname

neu:

private static String DB_NAME = "jdbc:derby:db_musikbox;create=true";    // Datenbankname

Jedoch erhalte ich nun eine neue Fehlermeldung:

java.sql.SQLSyntaxErrorException: Das Schema 'SWONSON' ist nicht vorhanden.

Das Schema ist vorhanden. Denn wenn ich über die IDE auf meine Datenbank zugreife und
 CREATE SCHEMA SWONSON 

eingebe, sagt er mir, es sei schon vorhanden. Ich habe keine Ahnung was dort krumm ist :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dir ist aber schon klar das du gerade auf zwei unterschiedlichen Datenbanken arbeitest?

Mal ganz von vorn. Deine Variable DB_NAME sollte vielleicht besser DB_CONNECTION heißen. Denn genau das ist es, der Connection String. Denn dort gibst du an wie du dich mit deiner Datenbank verbinden willst. Wenn da etwas nach dem Schema //hostname:port drin steht wird genau das gemacht was da steht es wird eine Netzwerkverbindung zu deiner Datenbank hergestellt. In deinem Fall eine Verbindung zu localhost:1527. Denn dort hast du deine Datenbank über deine IDE gestartet! Wenn du mal netstat -a in der Kommandozeile deines Systems eingibst solltest du wenn du deine Datenbank in der IDE gestartet hast auch etwas auf dem Port 1527 sehen.

Wenn du nun nur den Datenbanknamen angibst wird eben keine Netzwerkverbindung zur Datenbank hergestellt sondern es wird eine Datenbank, wahrscheinlich im aktuellen Arbeitsverzeichnis deines Programms, erstellt. Das ist dann aber eine andere Datenbank als die die du in deiner IDE siehst.

Also schau mal in das Verzeichnis wo dein Programm liegt wenn du es ohne IDE startest. Da sollte es neue Verzeichnisse oder Dateien geben. Das ist dann deine Datenbank. In dieser Datenbank gibt es dann natürlich erst mal das Datenbank Schema SWONSON nicht. Das musst du dann anlegen lassen. Entweder macht das dein Programm beim ersten Start oder du lieferst bereits eine passende leer Datenbank mit aus.

create=true musst du nur angeben wenn du willst das auch eine Datenbank wenn keine vorhanden ist angelegt wird. Sonst brauchst du das natürlich nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Schille,

danke für deine Antwort.

Wie stelle ich denn eine Datenbank zum "mitgeben" bereit? Ich muss ehrlich gestehen, dass ich dachte, die Datenbank aus der IDE wäre bereits im Programm (bzw im Verzeichnis) und würde mitgegeben. Ich tendiere zur Lösung des mitgebend, statt des erstellend bei der ersten Ausführung des Programms, was meinst du/ihr?

mit besten Grüßen

String

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie willst du denn deine Anwendung später ausliefern? Denn du hast ja zum einen schonmal dein Programm was in einer jar Datei liegt. Dann kommen noch weitere jar Dateien hinzu die du für deine Derby Datenbank brauchst. Das ganze wirst du ja sicherlich in einer zip Datei ausliefern?

Da packst du dann einfach deine Datenbank dazu und gut ist. Du musst dann nur in deinem Programm dafür sorgen das deine Datenbank die du mit auslieferst genutzt wird und nicht irgendeine andere. Im Derby connection string kannst du auch den Pfad zur Datenbank angeben.


String database_connection = "jdbc:derby:/path/to/my/database/MyDataBase";


//alternativ dynamisch aktuelles Verzeichnis ermitteln

File currentDir = new File("");

String database_connection = "jdbc:derby:" + currentDir.getAbsolutePath() + "MyDataBase";


Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...