H2 Verständnisfrage "Embedded"??

Enigma228

Bekanntes Mitglied
Hallo leute ich steh total auf dem Schlauch!!

Embedded -> bedeutet doch eingebettet oder?
Für eine DB heisst das, das ich nicht extra Routinen auf dem Rechner installieren muss?

Nun gut in einem meiner vorherigen Threads habe ich die Info bekommen, das ich embedded bin wenn ich das so schreibe:

Java:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
 
 
public class DB_Connect {
 
    Connection conn;
    public DB_Connect() {
        try {
            Class.forName("org.h2.Driver");
            conn = DriverManager.getConnection("jdbc:h2:~/test", "root", "meinpasswort"); // embedded???
            Statement stmt = conn.createStatement();
            String order = "DROP TABLE IF EXISTS TEST; CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255));";
            stmt.execute(order);
            //conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}
ich hatte nun ein Programm geschrieben in dem ich mit H2 arbeite und was auch in Eclipse einwandfrei funktioniert!! (auf meinem PC)
Nun habe ich eine Runnable Jar file aus dem Projekt erstellt und es startet auf meinem PC aber nicht auf einem anderen!!!
die erste Version des Programms lief mit mit MySQL einwandfrei auch auf dem anderen PC(DB war aber nicht embedded).. daraufhin habe ich lediglich die Datenbankzugriffsklasse auf H2 umgestellt(bei mir hats funktioniert) und entsprechend die jar-File erstellt. auf meine PC läuft das Prog und auf dem anderen nicht..
Musste ich noch irgendwas ausser der jar file mit rüberziehen???
Wo könnte der Fehler liegen?
Auf Wunsch schicke ich das Projekt auch gerne..
nur mitteilen ob als jar oder als Project..

Ergänzung.. Die Runnable Jar funktioniert auch bei meinem PC nicht... ich teste weite um noch mehr Infos für euch bereitzustellen!!

Es hapert am Treiber an der stelle Schmeisst er eine Exception.. das heisst irgendwie hat er den Treiber nicht ins jar gepackt oder?

Java:
try {
	Class.forName("org.h2.Driver");
} catch (ClassNotFoundException cnfExc) {
	JOptionPane.showMessageDialog(null, "Treiberfehler: "+cnfExc.getMessage());
	System.exit(1);
}
 
Zuletzt bearbeitet:

Antoras

Top Contributor
Embedded heißt, dass das DBMS beim Programm mitgeliefert wird. Du musst H2 also auch in dein JAR packen, damit dein Programm auch darauf zugreifen kann.
Du kannst beim Extract-Dialog von Eclipse angeben, das es dir alle Abhängigkeiten gleich mit ins JAR packen soll.
 

Enigma228

Bekanntes Mitglied
Ok den Fehler hab ich gefunden...
ich habe die Jar-File für die H2 DB in eine Library gepackt und das mochte er wohl nicht..
nachdem ich sie als als externe Jar dann nochmal eingebunden habe und wieder eine Runnable Jar erstellt habe funktionierte das Programm..
Allerdings musste ich dann feststellen, dass er die DB selbst nicht mitgezogen hat.. auf dem anderen Rechner meckert er jetzt Datenbank nicht verhanden.. auf meinem wieder nicht, womit ich wieder am Anfang bin beim Thema embedded..

Seufz..
ich gehe immer so vor um eine Runnable Jar zu erstellen:
Rechtsklick auf Projekt
->Export
->Runnable Jar File
->Extract required Libraries into generated Jar
->Finish
 

Enigma228

Bekanntes Mitglied
Erstmal danke für den Hinweis
Ich glaube ich habe das Problem gefunden...
Java:
connectDB = DriverManager.getConnection("jdbc:h2:~/"+database+";IFEXISTS=TRUE", user, passwd);
steht ja das "~" für einen Pfad.. nur das dieser Pfad bei mir im Windows-Verzeichnis "User" ist und nicht im Arbeitsverzeichnis von Eclipse und dementsprechend wird sie nicht mit in die Jar gepackt..

wie ist jetzt eigentlich beste Vorgehensweise? wenn ich sie in die Jar Datei selbst verlege, kann ich dann noch neue Daten einfügen oder ist dann nur lesbar?
 

Antoras

Top Contributor
Die JAR ist nur lesbar, du kannst die Dateien darin nicht ändern (zumindest nicht ohne es zu entpacken, etwas zu ändern und dann wieder neu zu packen). Eine embedded DB erstellt deshalb ein paar Dateien in dem Verzeichnis das du angegeben hast und speichert darin alle Daten.
 

Enigma228

Bekanntes Mitglied
Danke.. ich habe jetzt den Pfad geändert:

Java:
connectDB = DriverManager.getConnection("jdbc:h2:"+System.getProperty("user.dir")+"/DB/"+database+";IFEXISTS=TRUE", user, passwd);
Die Datenbank in einen Ordner namens DB kopiert.. und den einfach in das gleiche Verzeichnis wie die Jar Datei auf dem Zielrechner kopiert..

Jetzt scheint es zu funktionieren...

Danke!!!!!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I MySQL Verständnisfrage bei neuem Feld hinzufügen Datenbankprogrammierung 2
O Verständnisfrage Datenbankprogrammierung 1
D JDBC - Verständnisfrage Datenbankprogrammierung 2
brainray Verständnisfrage zu varchar und Speicherplatz Datenbankprogrammierung 3
M Verständnisfrage Datenbankprogrammierung 4
LimDul H2 Embedded DB und Gigabytes an Daten Datenbankprogrammierung 0
thet1983 Derby/JavaDB Embedded Driver Datenbankprogrammierung 7
L H2 Embedded H2 Datenbank über Netzwerk zugreifen? Datenbankprogrammierung 0
J Hibernate + HSQL embedded Datenbankprogrammierung 2
H H2 Datenbank Embedded? Datenbankprogrammierung 8
S Derby/JavaDB Probleme beim anlegen einer embedded DB Datenbankprogrammierung 13
D Embedded Derby Datenbank Datenbankprogrammierung 4
E embedded DB Datenbankprogrammierung 8
N suche embedded key-value-datenkank Datenbankprogrammierung 2
P Embedded Database und große Datenmengen Datenbankprogrammierung 23
C Embedded DB für Java Datenbankprogrammierung 26
F H2 embedded Datenbankprogrammierung 4
G Embedded Datenbank Datenbankprogrammierung 4
S Embedded DB, die aus mehreren JVMs gestartet werden kann? Datenbankprogrammierung 10
K Java DB Embedded DB Datenbankprogrammierung 8
M Embedded Datenbank? Datenbankprogrammierung 2
D Firebird Embedded dlls Datenbankprogrammierung 3
G embedded H2; wie tables anlegen? Datenbankprogrammierung 3

Ähnliche Java Themen


Oben