String Geschrieben 13. Juni 2013 Geschrieben 13. Juni 2013 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 Zitieren
Schiller256 Geschrieben 13. Juni 2013 Geschrieben 13. Juni 2013 Was hast du denn in der Variable DB_NAME stehen? Da sollte in etwa das "jdbc:derby:MyDbTest;create=true" drin stehen. Denn eigentlich ist der EmbeddedDriver genau dazu gedacht das du die DB mit der Anwendung startest. Step 3: Embedded Derby Zitieren
String Geschrieben 14. Juni 2013 Autor Geschrieben 14. Juni 2013 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. Zitieren
String Geschrieben 14. Juni 2013 Autor Geschrieben 14. Juni 2013 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 Zitieren
Schiller256 Geschrieben 14. Juni 2013 Geschrieben 14. Juni 2013 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. Zitieren
String Geschrieben 15. Juni 2013 Autor Geschrieben 15. Juni 2013 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 Zitieren
Schiller256 Geschrieben 15. Juni 2013 Geschrieben 15. Juni 2013 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"; Zitieren
String Geschrieben 15. Juni 2013 Autor Geschrieben 15. Juni 2013 Genau, ich würde es Später als Zip ausliefern. Klasse, ich danke dir für deine Hilfe. Ich werde es dann so machen, dass ich eine DB erzeuge und diese dann mitgeben. Vielen Dank Der String Zitieren
Empfohlene Beiträge
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.