Apache Derby ist eine in Java implementierte SQL Datenbank, die entweder eigenständig gestartet oder direkt in eine Java Anwendung eingebunden werden kann. Dieser Artikel zeigt, wie die Datenbank in eine Java Anwendung integriert und angesprochen werden kann.

Zunächst wird natürlich Derby benötigt. Bei Verwendung von Maven wird die folgende Abhängigkeit eingetragen:

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

Schon kann die Datenbank verwendet werden:

package de.patrickgotthard.derby;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class EmbeddedDerbyDemo {

    public static void main(final String[] args) throws SQLException {

        // connect
        final Connection connection = DriverManager.getConnection("jdbc:derby:UserDB;create=true");

        // create table
        connection.prepareStatement("CREATE TABLE users (username VARCHAR(50), password VARCHAR(32))").execute();

        // insert data
        connection.prepareStatement("INSERT INTO users (username, password) VALUES('Jane Doe', 't0ps3cr3t')").execute();

        // dump data
        final ResultSet resultSet = connection.prepareStatement("SELECT username, password FROM users").executeQuery();
        while (resultSet.next()) {
            final String username = resultSet.getString("username");
            final String password = resultSet.getString("password");
            System.out.printf("%s:%s\n", username, password);
        }
        resultSet.close();

        // drop table
        connection.prepareStatement("DROP TABLE users").execute();

        // shutdown
        try {
            DriverManager.getConnection("jdbc:derby:;shutdown=true");
        } catch (final SQLException e) {
            if ((e.getErrorCode() == 50000) && "XJ015".equals(e.getSQLState())) {
                System.out.println("Database shutdown normally");
            } else {
                e.printStackTrace();
            }
        }

    }

}