Apache Derby Datenbank standalone in Java App?

Hallo, kann mir jemand sagen, was ich machen muss, um meine Derby Datenbank in eine Java-Applikation zu integrieren? Also in der Entwicklungsumgebung läuft das Ganze einwandfrei (Eclipse), aber wenn ich dann ein jar-File exportiere, und dieses Starten möchte meckert die VM, das der jdbc Treiber nicht geladen werden könne.

Hat jemand eine Idee, was mir da fehlt?

Gruß vom Pianoman

Hallo
ich würde sagen du musst die JDBC KLasse noch in dein JAr File miteinbringen und dann dieses Laden. Jetzt lädt er wahrscheinlich das, welches du in den Buildpath bla bla eingefügt hattest.
Also kurz ich würde sagen, den Treiber in das jar file mit rein und dann in der benötigten Klasse importieren.

gruß Basti

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke für Deinen Tipp. Kannst Du mir genauer beschreiben, wie ich den Treiber mit in mein Jar-File hineinbekomme und ihn dann importiere? Bin ziemlicher Newbie in Sachen Java, drängt aber im Moment leider extrem.

Gruß

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Also in meiner Klasse Derby, die für den DB-Zugriff zuständig ist steht folgendes drin:

 /\*\*
 \* JDBC-Treiber-Name - Muss im Klassenpfad sein.
 \*/
 static final String DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";

Aber wie bekomme ich den da rein? Und wo bekomme ich das her? Ich habe ein Derby-Verzeichnis mit einem Unterverzeichnis \lib, und in diesem ist z.B. eine Derby.jar. Hilft Dir das weiter?

Gruß

naja erstelle dir doch einen Ordner lib in deinem Projekt und kopiere die Derby.jar (wenn sie den treiber enthält weiß ich leider auch gerade nicht) einfach per Strg-C und Strg-v in diesen lib ordner.
im porgramm schreibste dann einfach import org.****.*** wie auch immer und schon müsste es meiner meinung nach gehen.
einfach mal import org. und dann Strg+Leertaste in Eclipse und dann musste mal ein bisschen stöbern bestimmt findest du des.

grüße Basti

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Also ich hab jetzt mal einfach um andere Fehler auszuschließen die derby.jar in meinen Projektordner entpackt. Nun habe ich da einen ordner org, in welchem apache drin ist usw. In Eclipse läuft das nun so auch (ohne weiteres Iportieren irgendwelcher Dateien oder Pfade)

Wenn ich daraus jetzt allerdings eine jar exportiere, und diese dann mit java -jar meinedatei.jar aufrufe, dann bekomme ich wieder die Meldung, dass der JDBC-Treiber nicht geladen werden könne.

Ich komme jetzt leider gerade nicht weiter. Hast Du eine Idee, was ich vergessen habe oder falsch mache?

Gruß Nico

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Also entpacken brauchst du das nicht.
Einfach die jar datein nehmen und in dein Projekt/lib kopieren.
Den Ordner Lib vorher erstellen.
Dann importieren. mit import org.apache… und nochmal versuchen.

Hoffe das ich überhaupt richtig liege mit meiner vermutung, dass es so klappen soll.

poste doch mal bitte die klasse, in der du auf das Ding zugreifst.
danke

gruß basti

Also ich hab jetzt mal einfach um andere Fehler auszuschließen
die derby.jar in meinen Projektordner entpackt. Nun habe ich
da einen ordner org, in welchem apache drin ist usw. In
Eclipse läuft das nun so auch (ohne weiteres Iportieren
irgendwelcher Dateien oder Pfade)

Wenn ich daraus jetzt allerdings eine jar exportiere, und
diese dann mit java -jar meinedatei.jar aufrufe, dann bekomme
ich wieder die Meldung, dass der JDBC-Treiber nicht geladen
werden könne.

Ich komme jetzt leider gerade nicht weiter. Hast Du eine Idee,
was ich vergessen habe oder falsch mache?

Gruß Nico

Ok, also dies hier ist mal ein Teil der Klasse:

Aber wie gesagt, in Eclipse funktioniert das ja so. Das verstehe ich eben nicht. Die VM scheint da den Treiber ja zu finden. Also ich habe jetzt noch mal das ganze projekt neu angelegt, die Klassen erzeugt und den Code reinkopiert. Dann habe ich einfach nur die Derby.jar in das Verzeichnis geschoben und es geht.

Warum denn nicht ohne Eclipse?

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.BatchUpdateException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.StringTokenizer;

/\*\*
 \* Klasse zur Abfrage der Datenbank - Die Klasse Derby.java dient der Verbindung
 \* zur Derby-Datenbank, der Trennung der Verbindung, sowie dem Abfragen,
 \* Erzeugen und Löschen von Daten.
 \*/
public class Derby {

 int[] updateCounts = null;

 public boolean PasswordUsername = false;

 public int UserLevel = 0;



 //\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
 //\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* Datenbankverbindung etc. \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
 //\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
 //\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
 //\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
 //\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*

 /\*\*
 \* Verbindung zur Datenbank
 \*/
 Connection connection;

 /\*\*
 \* JDBC-Treiber-Name - Muss im Klassenpfad sein.
 \*/
 static final String DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";

 /\*\*
 \* Verbindungs-URL - Erstellt beim ersten Aufruf eine neue Datenbank.
 \*/
 //static final String URL = "jdbc:derby:c:/KnowHowDB;create=true";
 static final String URL = "jdbc:derby:" + System.getProperty( "user.dir" ).replace('\\','/') + "/KnowHowDB;create=true";

 /\*\*
 \* Verbindung zur Datenbank herstellen.
 \*/
 public void connect() {

 // Treiber laden
 try {
 Class.forName(DRIVER).newInstance();
 } catch (Exception ex) {
 System.out.println("Der JDBC-Treiber konnte nicht "
 + "geladen werden.");
 System.exit(1);
 }
 // Verbindung herstellen
 try {

 connection = DriverManager.getConnection(URL);
 } catch (SQLException ex) {
 System.out.println("Die Verbindung zur Datenbank konnte "
 + "nicht hergestellt werden. "
 + "Die Fehlermeldung lautet: " + ex.getMessage());
 System.exit(1);
 }
 }

 /\*\*
 \* Verbindung trennen
 \*/
 public void disconnect() {
 try {
 if (connection != null && !connection.isClosed()) {
 connection.close();
 connection = null;
 }
 } catch (SQLException ex) {
 System.out.println("Die Verbindung zur Datenbank "
 + "konnte nicht geschlossen werden. "
 + "Die Fehlermeldung lautet: " + ex.getMessage());
 System.exit(1);
 }
 }



 //\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
 //\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* SQL-Abfrage allgemein \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
 //\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
 //\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
 //\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
 //\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*



 /\*\*
 \* SQL-Statement an die Datenbank absetzen (Fehlerbehandlung, etc)
 \*/
 public void sqlStatement(String Statement) {
 String message1 = "SQLException in sqlStatement. Die Fehlermeldung lautet: ";
 String message2 = "BatchUpdateException in sqlStatement. Die Fehlermeldung lautet: ";
 try {
 Statement s = connection.createStatement();
 s.addBatch(Statement);
 updateCounts = s.executeBatch();
 } catch (BatchUpdateException e) {
 System.out.println(message2 + e.getMessage());
 } catch (SQLException e) {
 System.out.println(message1 + e.getMessage());
 }
 }

Also entpacken brauchst du das nicht.
Einfach die jar datein nehmen und in dein Projekt/lib
kopieren.
Den Ordner Lib vorher erstellen.
Dann importieren. mit import org.apache… und nochmal
versuchen.

Hoffe das ich überhaupt richtig liege mit meiner vermutung,
dass es so klappen soll.

poste doch mal bitte die klasse, in der du auf das Ding
zugreifst.
danke

gruß basti

Ahh sieht doch schon super aus.
probier es doch mit dem kopieren in den Lib ordner und der zeile

import org.apache.derby.jdbc.EmbeddedDriver

oben bei deinen Imports?!?!
dann müsste es auch ohne eclipse gehen!

gruß Basti

ps morgen früh um 9 gehts weiter, hab jetzt Feierabend :smile:

import org.apache.derby.jdbc.EmbeddedDriver

oben bei deinen Imports?!?!
dann müsste es auch ohne eclipse gehen!

Der Import alleine nuetzt nichts. Man muss dafuer sorgen, dass
das derby.jar im Classpath ist. Ausserhalb von eclipse muss man das
eben selbst managen.

Entweder du gibts es direkt beim Aufruf deines JARs mit (wie rufst
du das jar auf?) oder du fuegst es dem globalen CLASSPATH deines
Betriebsystems hinzu.
Unter Windows koennte der CLASSPATH dann z.B. so aussehen:

CLASSPATH=.;c:\derby\derby.jar

Gruss, Patrick

Hallo, also der die Datei ist in meinem Classpath drin, der Import mit

import org.apache.derby.jdbc.EmbeddedDriver

geht nicht, da gibts nur eine Fehlermeldung. Obwohl die Anwendung in Eclipse läuft (ohne den Import).

Aber warum findet er den Treiber trotzdem nicht, wenn die Derby.jar in meinem Classpath von Windows drin ist?

Sehr verwirrend für mich…

Entweder du gibts es direkt beim Aufruf deines JARs mit (wie
rufst
du das jar auf?) oder du fuegst es dem globalen CLASSPATH
deines
Betriebsystems hinzu.
Unter Windows koennte der CLASSPATH dann z.B. so aussehen:

CLASSPATH=.;c:\derby\derby.jar

Gruss, Patrick

Hallo
Aber warum findet er den Treiber trotzdem nicht, wenn die
Derby.jar in meinem Classpath von Windows drin ist?

Wenn du dir unter Windows die Umgebungsvariablen anschaust, dann
kann es u.U. zwei CLASSPATH Variablen geben. Eine fuer den User
und eine Systemvariable.
Du solltest sicherstellen, dass der letztlich benutzte CLASSPATH
auch wirklich das derby.jar enthaelt.

Wenn du dein jar im Moment per Doppelklick startest, dann starte
s doch jetzt mal ueber die Konsole und gib den CLASSPATH selbst
mit. Muesste ungefaehr so aussehen:

java -cp .;c:\temp\derby.jar -jar myJar.jar MyMain.class

Gruss, Patrick

Dankeschön, der Classpath war verkehrt.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]