Map persistante avec une base de données H2

Soyez le premier à donner votre avis sur cette source.

Vue 4 216 fois - Téléchargée 438 fois


Description

Le code déposé ici implémente une Map<Serializable, Serializable> dont les données sont stockées sur une base de données H2.

Les bases de données H2 sont faciles à utiliser et à partager, il n'y a qu'un jar (qui fait moins de 2 Mo) et les fichiers de données (extension .h2.db).
Puisqu'il n'y a rien à installer, c'est une dépendance facile à déployer pour n'importe quel projet Java.

Le code de la Map que je propose permet de manipuler la base de données de manière totalement transparente. Il autorise le stockage de n'importe quelle couple clé/valeur pour des objets sérialisables ou null.

Exemple :

package ccm.kx.test;

import java.io.File;

import ccm.kx.h2.DatabaseMap;

public class Test
{    
    public static void main(String[] args)
    {
        // Créé la base et la table si nécessaire, et ouvre une connexion
        DatabaseMap map = new DatabaseMap(new File("databaseTest.h2.db"),"table_test");
        
        System.out.println(map.getJdbcUrl()); // jdbc:h2:file:[...]\databaseTest
        System.out.println(map.getDatabaseTable()); // TABLE_TEST
        
        map.put("test", "toto");
        System.out.println(map.get("test")); // toto
        
        map.close(); // ferme la connexion
    }
}

Pour fonctionner, il est nécessaire d'ajouter la dépendance sur DatabaseMap et H2.
Par exemple :
java -classpath .;DatabaseMap-1.0.jar;h2-1.3.175.jar ccm.kx.test.Test


Le fichier passé en argument du constructeur indique l'emplacement de la base de données (l'extension ".h2.db" est facultative), si elle n'existe pas elle est créée.
Pour un même fichier, la base peut contenir plusieurs tables, le deuxième argument indique le nom de la table à utiliser. Si elle n'existe pas elle est créée.

Deux paramètres optionnels peuvent être passés au constructeur : le login et password de l'utilisateur. L'utilisateur qui créé la base de données en devient administrateur.
La méthode String getJdbcUrl() permet de récupérer l'URL JDBC de la base de donnée manipulée.

Il est possible d'administrer la base de données via l'interface graphique de H2 sans rien installer de plus. Il suffit de démarrer le jar de H2 qui ouvre un web service sur le navigateur internet.
Il faut se connecter avec une configuration "Generic H2 (embedded)", l'URL JDBC et les login, mot de passe.
Par exemple on peut créer une nouvelle table sans passer par la Map. Dans ce cas la structure doit être la suivante CREATE TABLE nom (KEY BLOB, VALUE BLOB).

Remarque : il est possible de donner des droits restreints à un utilisateur (lecture seule par exemple), cependant le code de la Map n'a pas connaissance des droits de l'utilisateur, si un appel en écriture a lieu malgré les restrictions le code lèvera une exception.

Attention : l'utilisation de la méthode clear() efface toutes les données, mais ne supprime ni la table, ni la base de données. Pensez à supprimer manuellement les fichiers .h2.db dont vous ne vous servez plus.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Commenter la réponse de KX

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.