Derby Datenbank in Java-Programm einbetten
Vorhin schrieb ich ja schon im Bezug auf meine Studienarbeit über SIMON als RMI-Alternative, nun zeige ich euch, wie ihr eine Apache Derby-Datenbank in eure Programme einbetten könnt. Apache Derby ist eine in Java geschriebene SQL-Datenbank, die entweder eigenständig gestartet oder auch in ein Java-Programm eingebunden werden kann. Das ist vor allem dann sinnvoll, wenn eine aufwändige Installation eines separaten Datenbankservers aus irgendeinem Grund nicht gerechtfertigt ist (zum Beispiel, wenn es um ein einfaches Anwenderprogramm geht).
Um die Datenbank einzubinden, benötigst du erst einmal die passende Bibliothek. Hierzu gehst du auf die Apache Derby Downloadseite und lädst dir das neuste lib-Paket herunter. In dem Paket sind viele .jar-Dateien enthalten, es wird daraus aber nur die derby.jar benötigt, welche du in dein Projekt einbinden musst.
Nun kann man schon loslegen und die Datenbank implementieren. Dazu habe ich einmal eine ganz simple Klasse erstellt, mit der man eine Datenbank starten und stoppen kann. Beim ersten Start wird automatisch die Tabelle users angelegt.
package de.techspread.derby;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class EmbeddedDerby {
private Connection connection;
private String database = "MeineDatenbank";
public boolean start() {
try {
Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
if(new File(database).exists()) {
connection = DriverManager.getConnection("jdbc:derby:" + database);
} else {
connection = DriverManager.getConnection("jdbc:derby:" + database + ";create=true");
createTables();
}
return true;
} catch(Exception e) {
e.printStackTrace();
return false;
}
}
private void createTables() throws SQLException {
connection.prepareStatement("CREATE TABLE users (username VARCHAR(50), password VARCHAR(32))").execute();
}
public void stop() {
try {
DriverManager.getConnection("jdbc:derby:" + database + ";shutdown=true");
} catch(Exception e) {
e.printStackTrace();
}
}
}
Es soll nicht unerwähnt bleiben, dass laut Dokumentation beim Stoppen der Datenbank immer eine SQLException geworfen wird. Das ist vollkommen normal und kann ignoriert werden. Sollte eine Datenbank nicht korrekt gestoppt (zum Beispiel wenn man das Programm einfach abschießt) und dann wieder gestartet werden, startet die Datenbank einfach ein wenig langsamer, da Recovery-Routinen angestoßen werden.
Empfehlen
3 Kommentare
Praktisch, dankeschön.
PS: was für Java-Blogs hast du denn in deinem Feed Reader?
Garkeins
Mir ist bisher irgendwie noch kein Java-Blog über den Weg gelaufen und konkret danach gesucht habe ich auch nicht. Das oben genannte Blog habe ich auch nur bei der Suche nach der Thematik gefunden.
Interessieren dich mehr Java-Beiträge? Bisher hab ich hier noch nicht so richtig jemanden als Java-Programmierer entlarven können
Haha, grade wieder genau diesen Post beim googeln gefunden
Naja Java-Programmierer bin ich nicht, aber interessieren tut’s mich dennoch