Basis data

SQL

Spons menyediakan perangkat abstraksi untuk membangun koneksi database JDBC yang menangani kompleksitas mendirikan efisien dikumpulkan koneksi dari JDBC URL.

Sementara layanan SQL mendukung JDBC connector, Menempa pelaksanaan Spons hanya kapal dengan yang paling umum:

  • Sql Saya
  • Sqlite
  • H2

Peringatan

Karena Sqlite memiliki banyak keterbatasan, penggunaannya sangat tidak dianjurkan kecuali dalam kasus di mana warisan kompatibilitas diperlukan. H2 adalah kita dianjurkan file yang didukung implementasi database.

Pemakaan

Sumber data yang dapat diakses melalui layanan plugin manager:

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

    }

}

URL JDBC seharusnya diperoleh dari SqlService#getConnectionUrlFromAlias(String), dengan sebuah alias yang cocok dengan salah satu dari alias URL JDBC yang terdaftar dalam konfigurasi Sponge global (config/sponge/global.conf) di bawah kunci sponge.sql.aliases.

Layanan SQL menyediakan koneksi yang terkumpul, sehingga mendapatkan koneksi dari DataSource yang dikembalikan nilainya tidaklah memakan banyak memori. Maka dari itu, kita merekomendasikan agar tidak menyimpan koneksi di sekitar, dan menutupnya segera setelah penggunaan yang telah ditunjukkan di atas. Setiap PreparedStatement dan ResultSet yang dibuat harus ditutup juga setelah digunakan, dengan object.close() atau, sebaiknya, melalui blok try-with-resources.

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.