Class Database
java.lang.Object
fr.luc.crcore.database.Database
- All Implemented Interfaces:
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 :
execute(String, Object...)— DDL ou DML qui ne renvoie rienupdate(String, Object...)— INSERT/UPDATE/DELETE, renvoie le nombre de lignes affectéesqueryOne(String, RowMapper, Object...)— SELECT renvoyant au plus une lignequery(String, RowMapper, Object...)— SELECT renvoyant plusieurs lignes
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 Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidclose()voidExécute un statement SQL (DDL ou autre) sans collecter de résultat.Connexion JDBC sous-jacente, pour les cas avancés (transactions custom, etc.).voidinTransaction(Runnable block) Exécute un bloc dans une transaction.<T> List<T> Exécute un SELECT et renvoie la liste de toutes les lignes mappées.<T> Optional<T> Exécute un SELECT et renvoie au plus une ligne.Démarre la création d'une table de manière fluide.booleantableExists(String name) Vérifie l'existence d'une table dans la base.intExécute un INSERT/UPDATE/DELETE et renvoie le nombre de lignes affectées.
-
Constructor Details
-
Database
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
Connexion JDBC sous-jacente, pour les cas avancés (transactions custom, etc.). -
table
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
Vérifie l'existence d'une table dans la base. -
execute
Exécute un statement SQL (DDL ou autre) sans collecter de résultat. Pour les INSERT/UPDATE/DELETE préférerupdate(String, Object...). -
update
-
queryOne
Exécute un SELECT et renvoie au plus une ligne.Optional.empty()si aucune ligne. LèveDatabaseExceptionsi plusieurs lignes matchent — penser à mettreLIMIT 1ou unWHEREunique. -
query
-
inTransaction
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:
closein interfaceAutoCloseable
-