# Java > Gnral Java > Persistance des donnes >  [HSQLDB] Votre avis sur un petit exemple complet... [Sources]

## calogerogigante

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 nanmoins 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 cre ainsi que son unique table TABLE_CLIENT, dans le folder ./datas, relatif  l'emplacement du programme excut.
(Si l'utilisateur ne tape rien, c'est une base de donne "bdd_test" qui est alors cre par dfaut).

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 trs loigns 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.  ::mouarf:: 

*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.

----------


## rmartins

Je vais me permettre de critiquer un peu (principalement) ta classe HSQLDBConnector  ::P: . Premirement 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 mme si une exception se produit. Je mets en fichiers attache mes modifications(fait  la va-vite). Attend les critiques aussi  ::mouarf:: 

FenetreDesClients.java

HSQLDBConnector.java

----------


## Baptiste Wicht

Je suis du mme avis que rmartins en ce qui concerne les close(), tu devrais les mettre dans le bloc finally de tes try catch pour tre sr 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 vrifie dja si la connection est ouverte via le instance_flag

----------


## calogerogigante

Un grand merci pour vos remarques et commentaires.

Disons que j'avais aussi voulu faire un singleton avec la mthode du flag boolen.

Mais j'aime bien la nouvelle version amliore propose par rmartins !!
On sent la touche professionnelle. Je vais la tester cette aprs-midi...
Merci ! Merci !

Donc, puis-je vous demander une dernire 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 prtendre  utiliser un SGBDR embarqu tel que HSQLDB dans une application java ?*

----------


## rmartins

> Par contre, je trouve qu'il n'y a pas besoin de faire un singleton, puisqu' l'ouverture de la connection, il vrifie dja si la connection est ouverte via le instance_flag


 Certe l'instance_flag vrifie si une connexion DB existe dj, mais ce qui m'a beaucoup drang, 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 indsirables). Et comme en plus toutes les mthode tait static, donc il voulait un singelton.  C'est pour cela que j'ai proposer cette faon de faire.  




> Donc, puis-je vous demander une dernire 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 prtendre  utiliser un SGBDR embarqu tel que HSQLDB dans une application java ?*


Ca c'est une question qui n'a pas de rponse prcise... 
Oui dans ton cas (et dans la plus part des cas) c'est une bonne faon de faire.
Non car il y a d'autres (multitude) faon de faire. Tout dpend ce que le dveloppeur a envie de faire. En tout cas dans un environnement multithread il faut encore amliorer 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 mme manire, il y a que le driver et les config qui change.

----------


## calogerogigante

OK, c'est trs clair !

Merci pour vos rponses.

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

 ::D:

----------


## calogerogigante

Je me permets de faire remonter ce post.
J'ai essay avec beaucoup d'attention le code modifi par rmartins, de faon trs intressante.

J'ai donc bien compris le soucis de fermer  chaque fois l'accs  la base de donnes. Mais bizarrement, quand je quitte mon application, la BBD (nomme XXXX par exemple) reste comme loque. Cd que le fichier :

XXXX.lck

est toujours prsent.

Alors qu'avant, ce fichier disparassait aprs le programme.
Pourquoi ?

----------


## calogerogigante

J'ai compris : il faut une mthode supplmentaire dans HSQLDBConnector (version modifie):



```

```

Et remettre ceci dans la mthode WindowClosing :



```

```

C'est parce que le SGBDR HSQLDB doit tre ferm par l'instruction SHUTDOWN.

----------


## calogerogigante

Comme je me sens un ternel dbutant, j'ai une petite pense pour les autres dbutants, aussi intresss par HSQLDB :

Je vous mets le code complet de l'application, que les gens de ce forum m'ont aids  amliorer.

P.S. : j'ai rajout une petite variante, suite  une question pose 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 !!
 ::ange::

----------

