Bases de données

SQL

Sponge fournit une abstraction pratique pour établir une connexion avec une base de données JDBC. Cette dernière gère la complexité qu’est d’établir une connexion groupée et efficace à partir d’une URL JDBC.

Tandis que le service SQL prend en charge n’importe quel connecteur JDBC, l’implémentation Forge de Sponge est fournie uniquement avec les plus courants :

  • MySQL

  • Sqlite

  • H2

Avertissement

Puisque Sqlite a de nombreuses limitations, son usage est fortement déconseillé, excepté dans le cas ou une rétrocompatibilité est nécessaire. H2 est notre implémentation de base de données basée sur fichiers de préférence.

Usage

Une source de donnés peut être accédée via le gestionnaire de service du plugin:

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

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;

private SqlService sql;
public 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 {
    String uri = "jdbc:h2:imalittledatabaseshortandstout.db";
    String sql = "SELECT * FROM test_tbl";

    try (Connection conn = getDataSource(uri).getConnection();
         PreparedStatement stmt = conn.prepareStatement(sql);
         ResultSet results = stmt.executeQuery()) {

        while (results.next()) {
            // ...
        }

    }

}

Les URLs JDBC doivent être obtenues depuis SqlService#getConnectionUrlFromAlias(String), avec un alias qui correspond à l’un des alias d’URL JDBC listés dans la configuration globale de Sponge (config/sponge/global.conf) sous la clé sponge.sql.aliases.

Le service SQL fournit une connexion groupée (pooled), afin que la récupération d’une connexion à l’aide du DataSource retourné ne soit pas trop lourd. Nous recommandons donc de ne pas garder les connexions et de les fermer peu de temps après leur utilisation, comme montré ci-dessus. Tout PreparedStatement ou ResultSet créé doit également être fermé après utilisation, avec object.close(), ou, de préférence, avec un bloc try-with-resources.

NoSQL

Actuellement, Sponge ne fournit pas d’abstraction spécifique pour accéder à la base de données NoSQL (MongoDB etc). Les plugins qui veulent utiliser la base de données NoSQL doivent fournir leur propre connecteur.