Datenbanken

SQL

Sponge stellt eine bequeme Abstraktion für JDBC-Datenbank-Verbindungen bereit, die die Komplexität des Verbindungsaufbaus einer effizienten Verbindung von einer JDBC-URL behandelt.

Während der SQL-Dienst JDBC-Connector unterstützt, wird die Forge-Umsetzung von Sponge nur mit dem am häufigsten Verwendeten ausgeliefert:

  • MySQL

  • SQLite

  • H2

Warnung

Da SQLite viele Einschränkungen hat, ist dringend von der Verwendung abgeraten, außer in Fällen, in denen Kompatibilität mit älteren Daten erforderlich ist. H2 ist unsere empfohlene dateibasierte Datenbankimplementierung.

Verwendung

Auf eine Datenquelle kann über den Plugin-Dienstmanager zugegriffen werden:

import org.spongepowered.api.Sponge;
import org.spongepowered.api.service.sql.SqlService;

import java.sql.Connection;
import java.sql.SQLException;

private SqlService sql;
public javax.sql.DataSource getDataSource(String jdbcUrl) throws SQLException {
    if (sql == null) {
        sql = Sponge.getServiceManager().provide(SqlService.class).get();
    }
    return sql.getDataSource(jdbcUrl);
}

// Later on
public void myMethodThatQueries() throws SQLException {
    Connection conn = getDataSource("jdbc:h2:imalittledatabaseshortandstout.db").getConnection();
    try {
        conn.prepareStatement("SELECT * FROM test_tbl").execute();
    } finally {
        conn.close();
    }

}

Da der SQL-Service einen Pool aus Datenbankverbindungen besitzt, ist es keine aufwändige Operation, eine Verbindung zu einer Datenquelle zu erhalten. Deswegen empfehlen wir, wie im Beispiel gezeigt, Verbindungen nicht lange vorzuhalten, sondern sie direkt wieder nach der Benutzung zu schließen. (Ordnungsgemäßes Ressourcenmanagement bedeutet, dass Verbindungen geschlossen werden müssen).

NoSQL

Sponge bietet derzeit keine spezielle Abstraktion für NoSQL Datenbanken (MongoDB etc.) an. Plugins, die NoSQL-Datenbanken verwenden möchten, müssen eigene Anschlüsse verwenden.