IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Persistance des données Java Discussion :

[HSQLDB] Votre avis sur un petit exemple complet... [Sources]


Sujet :

Persistance des données Java

  1. #1
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut [HSQLDB] Votre avis sur un petit exemple complet...
    Bonjour,

    Je viens de faire en vitesse un exemple de petit programme qui utilise HSQLDB comme SGBDR embarqué : un programme minimaliste (mais c'est voulu) qui permet néanmoins de voir comment on pourrait utiliser HSQLDB.

    A l'ouverture, le programme demande un nom de B.D.D.
    Si cette base existe, elle est ouverte, sinon, elle est créée ainsi que son unique table TABLE_CLIENT, dans le folder ./datas, relatif à l'emplacement du programme exécuté.
    (Si l'utilisateur ne tape rien, c'est une base de donnée "bdd_test" qui est alors créée par défaut).

    Je compte en faire peut-être un petit tutoriel pour tous ceux qui posent des questions sur HSQLDB (et aussi sur H2, car leurs principes de fonctionnement respectifs ne sont pas très éloignés l'un de l'autre, je crois.)

    Mais n'étant pas un grand pro du java, je voulais ardamment avoir vos avis les plus acerbes sur ce petit programme, avant de le mettre dans les pages sources, pour en faire profiter un plus grand nombre.

    Merci d'avance aux courageux qui auront pleins de critiques à faire.

    REM : Y'a qu'à utiliser mes deux fichiers *.java tels quels dans Eclipse, en n'oubliant pas d'inclure simplement hsqldb.jar comme external library.

  2. #2
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Je vais me permettre de critiquer un peu (principalement) ta classe HSQLDBConnector . Premièrement j'aurais fait de la classe HSQLDBConnector un Singleton, ainsi je suis sur d'avoir seulement une seul instance et donc qu'une seul connection DB. Ensuite les close() devrait être dans un finally pour que les connections soit bien fermer même si une exception se produit. Je mets en fichiers attachée mes modifications(fait à la va-vite). Attend les critiques aussi

    FenetreDesClients.java

    HSQLDBConnector.java

  3. #3
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Je suis du même avis que rmartins en ce qui concerne les close(), tu devrais les mettre dans le bloc finally de tes try catch pour être sûr qu'il soie fermé

    Par contre, je trouve qu'il n'y a pas besoin de faire un singleton, puisqu'à l'ouverture de la connection, il vérifie déja si la connection est ouverte via le instance_flag

  4. #4
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    Un grand merci pour vos remarques et commentaires.

    Disons que j'avais aussi voulu faire un singleton avec la méthode du flag booléen.

    Mais j'aime bien la nouvelle version améliorée proposée par rmartins !!
    On sent la touche professionnelle. Je vais la tester cette après-midi...
    Merci ! Merci !

    Donc, puis-je vous demander une dernière confirmation (un doute subsiste encore en moi et peut-être encore chez d'autres novices ? ? ), c'est donc bien de la sorte qu'on peut prétendre à utiliser un SGBDR embarqué tel que HSQLDB dans une application java ?

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par wichtounet
    Par contre, je trouve qu'il n'y a pas besoin de faire un singleton, puisqu'à l'ouverture de la connection, il vérifie déja si la connection est ouverte via le instance_flag
    Certe l'instance_flag vérifie si une connexion DB existe déjà, mais ce qui m'a beaucoup dérangé, c'est qu'il essaie d'avoir une connexion mais permettait d'avoir une multitude d'instance de HSQLDBConnector (ce qui peux avoir des effets secondaires indésirables). Et comme en plus toutes les méthode était static, donc il voulait un singelton. C'est pour cela que j'ai proposer cette façon de faire.

    Citation Envoyé par calogerogigante
    Donc, puis-je vous demander une dernière confirmation (un doute subsiste encore en moi et peut-être encore chez d'autres novices ? ? ), c'est donc bien de la sorte qu'on peut prétendre à utiliser un SGBDR embarqué tel que HSQLDB dans une application java ?
    Ca c'est une question qui n'a pas de réponse précise...
    Oui dans ton cas (et dans la plus part des cas) c'est une bonne façon de faire.
    Non car il y a d'autres (multitude) façon de faire. Tout dépend ce que le développeur a envie de faire. En tout cas dans un environnement multithread il faut encore améliorer le singelton(mais ça c'est une autre histoire).
    Mais une connexion DB en java (que se soit embarqué ou non) se travaille de la même manière, il y a que le driver et les config qui change.

  6. #6
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    OK, c'est très clair !

    Merci pour vos réponses.

    Je vais enfin pouvoir embarquer HSQLDB (avec un peu moins de doute dans mon esprit) dans mon projet actuel (qui est un peu plus conséquent que ce modeste exemple !).


  7. #7
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    Je me permets de faire remonter ce post.
    J'ai essayé avec beaucoup d'attention le code modifié par rmartins, de façon très intéressante.

    J'ai donc bien compris le soucis de fermer à chaque fois l'accès à la base de données. Mais bizarrement, quand je quitte mon application, la BBD (nommée XXXX par exemple) reste comme loquée. Càd que le fichier :

    XXXX.lck

    est toujours présent.

    Alors qu'avant, ce fichier disparassait après le programme.
    Pourquoi ?

  8. #8
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    J'ai compris : il faut une méthode supplémentaire dans HSQLDBConnector (version modifiée):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
        public void fermer()
        {
          Connection connection = null;
          Statement st = null;
          try {
              connection = getConnection();
              st = connection.createStatement();
              st.execute("SHUTDOWN");
              close(connection, st);
              }
          catch (Exception e)
          {
            e.printStackTrace();
          }
        }
    Et remettre ceci dans la méthode WindowClosing :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            addWindowListener(new WindowAdapter()
                {
                public void windowClosing(WindowEvent event)
                {
                    (HSQLDBConnector.getInstance()).fermer();
                    System.out.println("Exit");
                    System.exit(0);
                }
            });
    C'est parce que le SGBDR HSQLDB doit être fermé par l'instruction SHUTDOWN.

  9. #9
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    Comme je me sens un éternel débutant, j'ai une petite pensée pour les autres débutants, aussi intéressés par HSQLDB :

    Je vous mets le code complet de l'application, que les gens de ce forum m'ont aidés à améliorer.

    P.S. : j'ai rajouté une petite variante, suite à une question posée par nicotine002 : la gestion d'un AUTO-INCREMENT pour chaque client créé.

    Que tous les p'tits bleus d'la Terre se tiennent la main !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/12/2014, 16h01
  2. Votre avis sur Spring par l'exemple de Gary Mak ?
    Par Baptiste Wicht dans le forum Spring
    Réponses: 5
    Dernier message: 09/08/2009, 13h33
  3. Donnez votre avis sur les articles de Developpez.com
    Par Geronimo dans le forum C++Builder
    Réponses: 13
    Dernier message: 14/01/2007, 23h00
  4. Votre avis sur mon petit site
    Par didou038 dans le forum Mon site
    Réponses: 2
    Dernier message: 24/12/2006, 15h33
  5. Réponses: 14
    Dernier message: 12/05/2006, 09h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo