Apache Derby Datenbank in Anwendung einbinden

veröffentlicht am 18. April 2012

Apache Derby ist eine in Java implementierte SQL-Datenbank, die entweder eigenständig gestartet oder auch in ein Java-Programm eingebunden werden kann. Letzteres ist vor allem dann sinnvoll, wenn die Installation eines separaten Datenbankservers aus irgendeinem Grund zu aufwändig ist (zum Beispiel, wenn es um ein einfaches Anwenderprogramm geht). Dieser Artikel zeigt, wie man Apache Derby ohne Persistenzframework in eine Anwendung einbetten kann.

Zunächst benötigt man die entsprechende Derby Bibliothek. Bei Maven trägt man einfach folgende Abhängigkeit in die pom.xml ein:

<dependency>
	<groupId>org.apache.derby</groupId>
	<artifactId>derby</artifactId>
	<version>10.8.2.2</version>
</dependency>

Ansonsten lädt man sich von der Apache Derby Downloadseite das neuste lib-Paket herunter. In dem Paket sind mehrere jar Dateien enthalten, es wird daraus aber nur die derby.jar benötigt. Sobald die Bibliothek eingebunden ist, kann die Datenbank verwendet werden. Ich zeige nun eine simple Klasse, mit der man die Datenbank starten und stoppen kann, wobei beim ersten Start automatisch die Tabelle users angelegt wird.

package de.patrickgotthard.derbyapp;

import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Database {

	private Connection connection;
	private final String database = "userdb";

	public void start() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
		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");
			initTables();
		}
	}

	private void initTables() 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 (final Exception e) {
			e.printStackTrace();
		}
	}

}

Die Klasse sollte nun nach belieben für den eigenen Zweck angepasst werden. Ohne Persistenzframework wird natürlich die reine JDBC API verwendet.

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.

Quellen und weiterführende Links

Hinterlasse einen Kommentar