Class Database

java.lang.Object
fr.luc.crcore.database.Database
All Implemented Interfaces:
AutoCloseable

public class Database extends Object implements AutoCloseable
Façade SQLite minimaliste pour CR-Core et les plugins de jeu downstream.

Ouvre une connexion JDBC vers un fichier SQLite et expose 4 méthodes pour couvrir 95 % des besoins :

Les paramètres (Object...) sont liés via PreparedStatement (donc pas d'injection SQL possible). Les UUID sont automatiquement convertis en TEXT.

Pour créer une table de manière fluide, voir table(String).

Cette classe n'est pas thread-safe. Un plugin Bukkit accède en général à la DB depuis le main thread ; pour de l'async, synchroniser explicitement ou ouvrir plusieurs instances.

  • Constructor Details

    • Database

      public Database(File file)
      Ouvre (ou crée) un fichier SQLite. Le dossier parent doit exister.
      Throws:
      DatabaseException - si le driver JDBC SQLite est absent du classpath, ou si l'ouverture du fichier échoue.
  • Method Details

    • getConnection

      public Connection getConnection()
      Connexion JDBC sous-jacente, pour les cas avancés (transactions custom, etc.).
    • table

      public TableBuilder table(String name)
      Démarre la création d'une table de manière fluide.
      db.table("foo")
          .ifNotExists()
          .column("id", ColumnType.UUID).primaryKey()
          .column("name", ColumnType.TEXT).notNull()
          .create();
      
    • tableExists

      public boolean tableExists(String name)
      Vérifie l'existence d'une table dans la base.
    • execute

      public void execute(String sql, Object... params)
      Exécute un statement SQL (DDL ou autre) sans collecter de résultat. Pour les INSERT/UPDATE/DELETE préférer update(String, Object...).
    • update

      public int update(String sql, Object... params)
      Exécute un INSERT/UPDATE/DELETE et renvoie le nombre de lignes affectées.
    • queryOne

      public <T> Optional<T> queryOne(String sql, RowMapper<T> mapper, Object... params)
      Exécute un SELECT et renvoie au plus une ligne. Optional.empty() si aucune ligne. Lève DatabaseException si plusieurs lignes matchent — penser à mettre LIMIT 1 ou un WHERE unique.
    • query

      public <T> List<T> query(String sql, RowMapper<T> mapper, Object... params)
      Exécute un SELECT et renvoie la liste de toutes les lignes mappées.
    • inTransaction

      public void inTransaction(Runnable block)
      Exécute un bloc dans une transaction. Commit automatique si le bloc se termine sans exception, rollback sinon. Pour des opérations multiples qui doivent être atomiques (ex. créer une équipe + ses membres).
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable