Datenbank mit Programm verbinden

mp89

Mitglied
Hallo,

zur Zeit arbeite ich (im Rahmen des Informatikunterichts) an einer kleinen Software die quasi eine Art Bibliotheksprogramm darstellt. Dazu benutze ich NetBeans IDE 6 und dort den Projekttyp Java => Desktop Application => Database App.
So weit so gut. Im IDE läuft das Programm bis jetzt einwandfrei mit fast allen Funktionen die es können soll. Also Einträge in die Datenbank schreiben, lesen etc. Schaue ich per IDE in der Datenbank nach also lese per SQL Kommando alles aus sehe ich auch die editierten/hinzugefügten Einträge. Nur würde ich gerne das Programm auch auf einem Rechner zum laufen bringen ohne vorher NetBeans installieren/starten zu müssen und dem IDE zu sagen "starte den DatenbankServer etc...". Weiß zufällig irgendwer wie ich meine Java Applikation mit der Datenbank verbinde? Am liebsten wäre mir wenn ich daraus dann auch gleich eine .bat machen könnte, damit der Benutzer lediglich diese Datei ausführen muss um alles zu starten... Sicherheit ist insofern auch erst einmal zweitrangig, zumal die Applikation eh nur auf einem Desktoprechner ausgeführt werden soll.

Folgendes habe ich ausprobiert damits vielleicht klapp (tut es aber nicht =( )

Ich starte den JavaDB Server via "startNetworkServer" (in JavaDB/bin)

C:\Programme\Sun\JavaDB\bin>startNetworkServer
DRDA_SecurityInstalled.I
Apache Derby Network Server 10.3.1.4 - (561794) wurde gestartet und ist seit 200
8-02-15 16:08:20.283 GMT bereit, Verbindungen am Port 1527 zu akzeptieren.
Jetzt starte ich "ij.bat" auch in JavaDB/bin
IJ Version 10.3
ij> connect 'jdbc:derby://localhost:1527/C:\DatenbankProjekt\.netbeans_derby\Buc
hDB;user=********;password=********';
ij>

Für user und password setz ich natürlich das richtige ein, sonst würde ja eh ein Fehler kommen...
Jetzt versuche ich meine Jar Datei zu starten:

java -jar JBookDBApp.jar
Verbindung steht =)
[TopLink Info]: 2008.02.15 05:14:19.570--ServerSession(17478435)--TopLink, versi
on: Oracle TopLink Essentials - 2.0 (Build b58g-fcs (09/07/2007))
15.02.2008 17:14:19 org.jdesktop.application.Application$1 run
SCHWERWIEGEND: Application class jbookdbapp.JBookDBApp failed to launch
Local Exception Stack:
Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0 (Build b58g-fcs (09/07
/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: java.sql.SQLTransientConnectionException: Die Verbindung wur
de zur³ckgewiesen, weil die Datenbank BuchDB nicht gefunden wurde.
Error Code: -4499
at oracle.toplink.essentials.exceptions.DatabaseException.sqlException(D
atabaseException.java:305)
at oracle.toplink.essentials.sessions.DefaultConnector.connect(DefaultCo
nnector.java:102)
at oracle.toplink.essentials.sessions.DatasourceLogin.connectToDatasourc
e(DatasourceLogin.java:184)
at oracle.toplink.essentials.internal.sessions.DatabaseSessionImpl.login
AndDetectDatasource(DatabaseSessionImpl.java:582)
at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.login
(EntityManagerFactoryProvider.java:280)
at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.de
ploy(EntityManagerSetupImpl.java:229)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactory
Impl.getServerSession(EntityManagerFactoryImpl.java:93)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactory
Impl.createEntityManagerImpl(EntityManagerFactoryImpl.java:126)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactory
Impl.createEntityManagerImpl(EntityManagerFactoryImpl.java:120)
at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerFactoryImpl.
createEntityManager(EntityManagerFactoryImpl.java:91)
at jbookdbapp.JBookDBView.initComponents(JBookDBView.java:317)
at jbookdbapp.JBookDBView.<init>(JBookDBView.java:39)
at jbookdbapp.JBookDBApp.startup(JBookDBApp.java:19)
at org.jdesktop.application.Application$1.run(Application.java:171)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.sql.SQLTransientConnectionException: Die Verbindung wurde zur³ck
gewiesen, weil die Datenbank BuchDB nicht gefunden wurde.
at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unkn
own Source)
at org.apache.derby.client.am.SqlException.getSQLException(Unknown Sourc
e)
at org.apache.derby.jdbc.ClientDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at oracle.toplink.essentials.sessions.DefaultConnector.connect(DefaultCo
nnector.java:100)
... 20 more
Caused by: org.apache.derby.client.am.DisconnectException: Die Verbindung wurde
zur³ckgewiesen, weil die Datenbank BuchDB nicht gefunden wurde.
at org.apache.derby.client.net.NetConnectionReply.parseRDBNFNRM(Unknown
Source)
at org.apache.derby.client.net.NetConnectionReply.parseAccessRdbError(Un
known Source)
at org.apache.derby.client.net.NetConnectionReply.parseACCRDBreply(Unkno
wn Source)
at org.apache.derby.client.net.NetConnectionReply.readAccessDatabase(Unk
nown Source)
at org.apache.derby.client.net.NetConnection.readSecurityCheckAndAccessR
db(Unknown Source)
at org.apache.derby.client.net.NetConnection.flowSecurityCheckAndAccessR
db(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.newNetConne
ction(Unknown Source)
... 24 more
Exception in thread "AWT-EventQueue-0" java.lang.Error: Application class jbookd
bapp.JBookDBApp failed to launch
at org.jdesktop.application.Application$1.run(Application.java:177)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0 (Build b58g
-fcs (09/07/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: java.sql.SQLTransientConnectionException: Die Verbindung wur
de zur³ckgewiesen, weil die Datenbank BuchDB nicht gefunden wurde.
Error Code: -4499
at oracle.toplink.essentials.exceptions.DatabaseException.sqlException(D
atabaseException.java:305)
at oracle.toplink.essentials.sessions.DefaultConnector.connect(DefaultCo
nnector.java:102)
at oracle.toplink.essentials.sessions.DatasourceLogin.connectToDatasourc
e(DatasourceLogin.java:184)
at oracle.toplink.essentials.internal.sessions.DatabaseSessionImpl.login
AndDetectDatasource(DatabaseSessionImpl.java:582)
at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.login
(EntityManagerFactoryProvider.java:280)
at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.de
ploy(EntityManagerSetupImpl.java:229)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactory
Impl.getServerSession(EntityManagerFactoryImpl.java:93)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactory
Impl.createEntityManagerImpl(EntityManagerFactoryImpl.java:126)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactory
Impl.createEntityManagerImpl(EntityManagerFactoryImpl.java:120)
at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerFactoryImpl.
createEntityManager(EntityManagerFactoryImpl.java:91)
at jbookdbapp.JBookDBView.initComponents(JBookDBView.java:317)
at jbookdbapp.JBookDBView.<init>(JBookDBView.java:39)
at jbookdbapp.JBookDBApp.startup(JBookDBApp.java:19)
at org.jdesktop.application.Application$1.run(Application.java:171)
... 8 more
Caused by: java.sql.SQLTransientConnectionException: Die Verbindung wurde zur³ck
gewiesen, weil die Datenbank BuchDB nicht gefunden wurde.
at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unkn
own Source)
at org.apache.derby.client.am.SqlException.getSQLException(Unknown Sourc
e)
at org.apache.derby.jdbc.ClientDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at oracle.toplink.essentials.sessions.DefaultConnector.connect(DefaultCo
nnector.java:100)
... 20 more
Caused by: org.apache.derby.client.am.DisconnectException: Die Verbindung wurde
zur³ckgewiesen, weil die Datenbank BuchDB nicht gefunden wurde.
at org.apache.derby.client.net.NetConnectionReply.parseRDBNFNRM(Unknown
Source)
at org.apache.derby.client.net.NetConnectionReply.parseAccessRdbError(Un
known Source)
at org.apache.derby.client.net.NetConnectionReply.parseACCRDBreply(Unkno
wn Source)
at org.apache.derby.client.net.NetConnectionReply.readAccessDatabase(Unk
nown Source)
at org.apache.derby.client.net.NetConnection.readSecurityCheckAndAccessR
db(Unknown Source)
at org.apache.derby.client.net.NetConnection.flowSecurityCheckAndAccessR
db(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.newNetConne
ction(Unknown Source)
... 24 more

Und genau hier taucht das Problem auf, dass die Applikation nicht startet. Weiß jemand warum? Hab ich irgendwas vergessen einzurichten? Ich meine ja das Programm gibt aus "Verbindung steht", das tut es sobald es mit dem NetzwerkServer verbunden wurde. Der Server gibt übrigens nichts weiter per Konsole aus.

Irgendjemand eine Idee? Für mich ist das die erste Datenbankapplikation und unser Informatiklehrer kennt sich nur mit "Access" aus und mit Java schon gar nicht...

Thx schon mal für jede Idee die mir weiterhelfen kann!

Gruß Max
 
Du versuchst dich auf die Datenbank BuchDB zu verbinden die jedoch noch gar nicht existiert.

Legst du die Tabellen die du benötigst aus deinem Programm heraus selber an?

Wenn ja kannst du beim Herstellen der Verbindung create=true mit übergeben, also:
connect jdbc:derby://localhost:1527/C:\DatenbankProjekt\.netbeans_derby\BuchDB;user=********;password=********';create=true

Ich kenn mich mit Netbeans nicht aus, daher weiss ich nicht was Netbeans einem da so alles abnimmt.
 
Das ich versuche auf BuchDB zuzugreifen ist richtig. Diese Datenbank gibt es laut NetBeans auch schon. Denn in diesem IDE kann ich das Verzeichnis angeben. Tue ich das nicht, dann geht mein Programm auch mit dem IDE nichtzu starten. Demzufolge und auch da ich ja schon ein paar Einträge reingeschrieben habe gibt es die DB. Ich gebe ja in der Kommandozeile als ij.bat bei meinem connect Befehl auch das Verzeichnis mit an, wo zumindest NetBeans diese Datenbank findet. Im Verzeichnis selber existieren bereits einige dat und andersartige Dateien...

Ich hab wirklich keine Ahnung wieso das ganze nicht geht. Mit NetBeans gehts ja...

Wenn ich als create-Argument true mit übergebe, was würde denn dann mit der Datenbank passieren die bereits vorhanden ist? Wird die überschrieben oder geht das ganze dann nicht?
Will mit die DB (mit einigen Einträgen) jetzt auch nicht futsch machen, deswegen frage ich lieber vorher.

Gruß Max
 
Och die Datenbank ist ja komplett Dateibasiert. Da kannst sie auch einfach vorher zippen und wenn was kaputt gegangen ist wieder entpacken, dann passiert auch nichts mit ;)

Such doch mal selber nach sowas wie
Code:
javadb "create=true"
dort findest du einige Ergebnisse. Du kannst ja schliesslich nicht immer im Forum fragen müssen also schau doch mal was du selber rausfindest.
 
Für alle die vielleicht dasselbe Problem plagt, hier die Lösung:

Net Beans 6 generiert eine persistence.xml Datei. In dieser Datei stehen die Verbindungseinstellungen, d.h. wenn das Projekt auch außerhalb von Net Beans (lokal) laufen soll, dann muss man dort lediglich den genauen Pfad bis hin zur Datenbank (Ordner) angeben.

Thx auch noch mal @ zeja für den Support :)

Gruß Max
 
Hallo,

ich habe einfach meine Datenbank ins Verzeichnis vom JavaDB ( C:\Program Files\Sun\JavaDB\bin ) kopiert.
Um rauszufinden wo die Datenbank abgespeichert ist, muss man bei Netbeans IDE 6.1 (Englische Version) unter Services->Databases-> bei Java DB rechts klicken und auf Properties gehen. Ein neues Fenster öffnet sich und unter "Database Location" wird der Pfad angezeigt.
Folgt man diesem Pfad im Explorer, dann sieht man einen Ordner, der den Namen der Datenbank beinhaltet. Diesen Ordner ins Verzeichnis vom JavaDB, wie oben beschrieben, kopieren.
Den Server startet man, indem man die "startNetworkServer.bat" Datei ausführt. Diese Datei findet man auch unter dem \bin Ordner.

Im Programm beließ ich die URL wie folgt: "jdbc:derby://localhost:1527/MeineDB".

Gruß,
MSNG
 
Zurück