数据库
SQL
Sponge 为建立 JDBC 数据库连接提供了一个方便的抽象,它处理了从 JDBC URL 建立高效化连接池的复杂度。
虽然 SQL 服务支持任何 JDBC 连接器,但是 Sponge 的 Forge 实现只包含最常见的:
MySQL
SQlite
H2
警告
因为 SQLite 有着诸多的限制,所以强烈建议不要使用它,除非是为了向旧版本兼容。H2 是我们建议的文件支持的数据库实现。
使用方法
可以通过插件的服务管理器访问数据源(Data Source):
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()) {
// ...
}
}
}
要想得到 JDBC URL,你应该调用 SqlService#getConnectionUrlFromAlias(String) 方法,并传入一个对应特定 JDBC URL 的别名,相应别名的映射表存储在 Sponge 的全局配置文件( config/sponge/global.conf
)中,并位于 sponge.sql.aliases
下。
SQL 服务提供池连接,因此从返回的 DataSource
中获取连接不需要付出多大代价。因此,我们建议不要保持连接,而像上面的示例那样做,也就是使用完就关闭它们。所有的 PreparedStatement
和 ResultSet
也应该在使用完后关闭,你可以使用 object.close()
,也可以使用一个 Try With Resources 块,事实上我们更建议后者。
NoSQL
Sponge 目前不提供任何特别的针对 NoSQL 数据库(MongoDB 等)的抽象。希望使用 NoSQL 数据库的插件必须自己处理数据库连接。