Bases de datos

SQL

Sponge provee una abstracción adecuada para establecer conexiones de la base de datos JDBC, que puede manejar las complejidades de establecer una conexión agrupada eficientemente desde una URL JDBC.

Mientras que el servicio SQL soporta a cualquier conector JDBC, la implementación Forge de Sponge carga con los más comunes:

  • MySQL
  • Sqlite
  • H2

Advertencia

Ya que Sqlite tiene muchas limitaciones, su uso no es recomendado, a menos que el caso requiera compatibilidad de legado. Recomendamos la implementación de H2 como base de datos de apoyo.

Uso

Se puede acceder a la fuente de datos a través del administrador de servicios del complemento:

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()) {
            // ...
        }

    }

}

Las URL de JDBC deben obtenerse de SqlService#getConnectionUrlFromAlias​​(String), con un alias que coincida con uno de los alias de JDBC URL listados en la configuración global de Sponge (config/sponge/global.conf) bajo la clave ` sponge.sql.aliases`.

El servicio SQL ofrece una conexión agrupada, con lo cual conseguir una conexión de la “Fuente de Datos” devuelta no es costoso. Por ese motivo, recomendamos no mantener conexiones sueltas y cerrarlas apenas han sido usadas, como se muestra más arriba. Cualquier PreparedStatement y ResultSet creados, también deben cerrarse luego de ser usados,con object.close() o, preferentemente, a través de un bloque trata-con-recursos.

NoSQL

Sponge does not currently provide any special abstraction over NoSQL databases (MongoDB etc.). Plugins that wish to use NoSQL databases must provide their own connectors.