H2 DB prüfen od sie neu ist

zhermann

Mitglied
Hallo Leute,

ich arbeite gerade an einem kleinen Prog rum.
Es soll Daten in eine H2 Db schreiben.
Wenn das Program gestartet wird,soll es prüfen ob die DB vorhanden ist, wenn nicht erstelle sie mir und richte die Tabellen ein.

Mein erster Versuch sieht so aus.

public void initDB(String filepath, String username, String userpwd) {
try
{
File dbFile = new File(filepath);
if (dbFile.exists())
{
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:" + filepath,username,userpwd);
Statement stmt = conn.createStatement();

// Nur zum Testen temporär
ResultSet rs = stmt.executeQuery("SELECT * FROM table1");
while( rs.next() )
{
String name = rs.getString("user");
System.out.println( name );
}
// TEST ENDE temporär
// ab hier dann der richtige Code
stmt.close();
conn.close();
}
else
{
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection(filepath,username,userpwd);
Statement stmt = conn.createStatement();
stmt.executeUpdate("CREATE TABLE table1 ( user varchar(50) )" );
stmt.executeUpdate( "INSERT INTO table1 ( user ) VALUES ( 'Claudio' )" );
stmt.executeUpdate( "INSERT INTO table1 ( user ) VALUES ( 'Bernasconi' )" );
stmt.executeUpdate( "INSERT INTO table1 ( user ) VALUES ( 'Zsolt' )" );
stmt.executeUpdate( "INSERT INTO table1 ( user ) VALUES ( 'Edina' )" );
}
} catch (Exception e)
{
System.out.println(e.getMessage());
}
}


Leider geht er immer in den else-Teil und erstellt eine DB, auch wenn die DB bereits vorhanden ist.
Jetzt frag ich mich, ob es nicht so was wie

conn = DriverManager.getConnection(filepath,username,userpwd);
if (conn.ist_die_DB_neu_erstellt) {
Dann Tabellen einrichten
{ else {
Datenbank lesen und Ändern
}

gib?

Hat da schon mal einer was in diese Richtung gemacht?

Gruß ZHermann
 

Thallius

Top Contributor
Schließt Du Connection auch irgendwann mal? Die Statements sollte man auch schliessen. Ich kenne H2 nicht aber eventuell erstellt es sonst alles erstmal nur im RAM und flushed das Ganze gar nicht in die Datei wenn es nirgendwo geschlossen wird?
 

zhermann

Mitglied
Hallo,

@thet1983:
der Path wird weiter oben zusammen gesetzt: System.getProperty("user.dir") + "//datenbank.db"
Sysout bring folgendes: "E:\MeinProgramm\datenbank.db", das ist dann auch soweit korrekt, oder?
Wenn die Datei nicht da ist, wird sie auch dort erstellt, allerdings mit dem Zusatz datenbank.db.mv.db
Jetzt stellt sich mir die Frage, wo nimmt er den Zusatz .mv.db her?

@Thallius:
Natürlich wird die DB geschlossen, habs halt vergessen zu kopieren, sorry.
 

zhermann

Mitglied
Ich glaube ich habe meinen Fehler gefunden :mad:
Blödes Hirn :confused:

Ich prüfe auf "datenbank.db". H2 hängt aber automatisch ".mv.db" an, dass habe ich irgendwie übersehen/ignoriert.
 

Ähnliche Java Themen


Oben