[HSQLDB] capacite maximal ?

Résolu
romuluslepunk Messages postés 11 Date d'inscription mercredi 10 août 2005 Statut Membre Dernière intervention 6 décembre 2006 - 19 juil. 2006 à 16:45
romuluslepunk Messages postés 11 Date d'inscription mercredi 10 août 2005 Statut Membre Dernière intervention 6 décembre 2006 - 2 août 2006 à 17:48
Bonjour,

j'ai optez pour HSQLDB comme base de données embarqué.
Lors du premier lancement du programme, il créera la base avec ses tables et des insertions dans les tables en se basant sur des fichiers textes.

Mon problème est lors des INSERT lors de la creation de la base :
<li>j'insère 82 enregistrements dans une table -> ok</li><li>j'insere 212 enregistrements dans une autre table -> ok</li><li>j'insère 16 enregistrements dans une 3ème table -> Il n'y a que les
4 1er qui persistent, les autres enregistrements ne sont pas dans la
table...</li>Le plus étrange est que je n'est aucune erreur retournée..
J'ai essayer de permuter la table 1 et 3 (d'abord inserer les 16 enregistrements puis les 82), mais il me manque toujours 12 enregistrements  dans la 1ere table (dont j'ai fait les INSERT en dernier...)

J'ai cherché sur leur site mais je n'est trouvé aucun texte sur une capacitée limité des bases de données, donc je suppose que le problème vient d'autres part mais je suis un peu perdu.

Merci

12 réponses

romuluslepunk Messages postés 11 Date d'inscription mercredi 10 août 2005 Statut Membre Dernière intervention 6 décembre 2006
2 août 2006 à 17:48
J'ai trouvé !

Pour ceux qui aurait le même problème, voici comment faire pour fermer la connexion (je met plus de code que vous voyez ce que sont les objets)  :

private Connection connnexion = null;
private Statement stat = null;

public void demarrer() throws ClassNotFoundException, SQLException
    {
    Class.forName(ConnexionBase.driver);
    this.connnexion = DriverManager.getConnection(ConnexionBase.url,
                ConnexionBase.pseudo,
                ConnexionBase.password);
    this.stat = this.connnexion.createStatement();
    }
   
public void arreter()
    {
    try
        {
        if(this.connnexion != null)
            {
            this.stat.execute("SHUTDOWN");
            this.stat.close();
            this.connnexion.close();
            }               
        }
    catch (SQLException e){e.printStackTrace();}
    }

J'avais simplement oublié le this.stat.execute("SHUTDOWN")
Tant de temps perdu pour si peu

Merci
3
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
19 juil. 2006 à 17:10
Vraiment étrange ton problème, j'avais créer un serveur de chat avec un HSQLDB en embarqué et je n'ai pas eu ce genre de problème. A mon avis cela n'est pas une limitation de la base ...

Tu as le bon de code incriminé ??

++
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
19 juil. 2006 à 17:52
boucle foireuse ?

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
romuluslepunk Messages postés 11 Date d'inscription mercredi 10 août 2005 Statut Membre Dernière intervention 6 décembre 2006
19 juil. 2006 à 17:56
Voici mon code :
public class Moteur
    {
    private ConnexionBase base = new ConnexionBase();
   
    private void CreationBaseDonnees()
        {
        // recupère liste des requete
        List<String> reqStruc = null;
        List<String> reqInsertPays = null;
        List<String> reqInsertLangues = null;
        List<String> reqInsertGenres = null;
        try
            {
            reqStruc = CreationBase.get_requeteStructure();
            reqInsertPays = CreationBase.get_requeteInsertPays();
            reqInsertLangues = CreationBase.get_requeteInsertLangues();
            reqInsertGenres = CreationBase.get_requeteInsertGenres();
            }
        catch (IOException e)
            {
            e.printStackTrace();
            this.base.arreter();
            System.exit(0);
            }
           
        // execute les requete
        List<List<String>> reqGeneral = new ArrayList<List<String>>(0);
        reqGeneral.add(reqStruc);
        reqGeneral.add(reqInsertGenres);
        reqGeneral.add(reqInsertPays);
        reqGeneral.add(reqInsertLangues);               
        for (int i=0 ; i<reqGeneral.size() ; i++)
            {
            for (int y=0 ; y<reqGeneral.get(i).size() ; y++)
                {
                try {this.base.requeteMaj(reqGeneral.get(i).get(y));}
                catch (SQLException e)
                    {
                    e.printStackTrace();
                    this.base.arreter();
                    System.exit(0);
                    }
                }
            }
        }

Mon code est bon car les liste sont ok et mes boucles aussi (j'ai tester avec System.out.println(reqGeneral.get(i).get(y)), et tout est bien inscrit).
Apres, la connexion est referme, je verifie mes lignes avec Quantum (dans Eclipse) et il me manque toujours les 12 dernier enregistrements inséré...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
19 juil. 2006 à 18:00
   for (int i=0 ; i<reqGeneral.size() ; i++)
            {
            for (int y=0 ; y<reqGeneral.get(i).size() ; y++)
=>
int generalsize = reqGeneral.size() ;
   for (int i=0 ; i<generalsize; i++)
            {
            for (int y=0 ; y<reqGeneral.get(i).size() ; y++)

essai ca ...

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
romuluslepunk Messages postés 11 Date d'inscription mercredi 10 août 2005 Statut Membre Dernière intervention 6 décembre 2006
19 juil. 2006 à 18:23
non j'ai toujours le même problème.

Ce qui me fait tourner le plus en bourique, c'est que toutes les requetes sont bien éxecutées !!!
J'ai ajoute catch (Exception e) à catch (SQLException e) pour vérifier les erreurs en détails mais il n'y a aucun problème.
J'ai essayer aussi avec un autre nom de base (j'ai cru a une histoire de cache ou quelque chose dans le genre) mais le problème persistent.
0
romuluslepunk Messages postés 11 Date d'inscription mercredi 10 août 2005 Statut Membre Dernière intervention 6 décembre 2006
19 juil. 2006 à 21:27
Je pense avoir ciblé le problème d'un peut plus près :

Juste après la création de la base, je fais un SELECT sur la dernière table qui a eu les INSERT, et j'ai bien tout les enregistrements.
Ensuite je ferme la connexion et stop le programme.

Je redemarre le programme (cette fois sans créer la base de données mais en se connectant simplement), refait le SELECT et il me manque toujours les 12 derniers enregistrements
Il ne se trouve pas dans le fichier .script de la base non plus...

Donc le problème survient lors de la fermeture ou de l'ouverture de la connexion.
Voici comment j'ouvre et ferme ma connexion :

private static final String driver = "org.hsqldb.jdbcDriver";
    private static final String url = "jdbc:hsqldb:bdd/bdd";
    private static final String pseudo = "sa";
    private static final String password = "";
    private Connection connnexion = null;
    private Statement stat = null;

    public void demarrer() throws ClassNotFoundException, SQLException
        {
        Class.forName(ConnexionBase.driver);
        this.connnexion = DriverManager.getConnection(ConnexionBase.url,
                    ConnexionBase.pseudo,
                    ConnexionBase.password);
        this.stat = this.connnexion.createStatement();
        }
   
    public void arreter()
        {
        try
            {
            if(this.connnexion != null)
                {
                this.stat.close();
                this.connnexion.close();
                this.connnexion = null;
                }               
            }
        catch (SQLException e){e.printStackTrace();}           
        }

Je n'est aucune erreur qui sort lors de l'execution...
Je suis perdu...

Merci de votre aide
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
19 juil. 2006 à 22:15
T'as essayé le debugagge pas à pas avec eclipse ?

A mon avis ce sera plus et tu feras tout de suite si ces commandes sont envoyées ou non ;-)

++
0
romuluslepunk Messages postés 11 Date d'inscription mercredi 10 août 2005 Statut Membre Dernière intervention 6 décembre 2006
20 juil. 2006 à 00:11
J'ai fait des tests et je suis sure que ma connexion est bien fermé.
Toutefois, c'est pas lors de la déconnexion qu'il crée le fichier .script ? Moi il me le fait à la connexion en reprenant le fichier log...

Malgré que  ma connexion est bien fermé, j'ai des erreurs qui surviennent certaine fois (1 fois sur 2 en général) lors de la connexion (lorsque je relance le programme) me disant que la base est deja utilisé...

Toutes mes requetes INSERT sont executé j'en suis sur, c'est au niveau de l'enregistrement dans le fichier log que sa pose problème.
J'ai l'impression qui veut pas dépasser les 17ko...

Je me demande si je vais pas voir du coté de Derby
Merci pour l'idée du débogage
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
20 juil. 2006 à 01:29
Il crée le script à l'arrêt de HSQLDB je crois, il vide sa mémoire dans le fichier script. C'est marqué dans la documentation peu exhaustive :s Lit bien la doc je crois que j'avais eu un problème similaire mais au final tout marchait bien pour moi :p Vérifie bien que tu n'as plus aucun processus qui tourne car les données sont enregistrées au shutdown du serveur. A mon avis ton problème peut venir de là ... après pourquoi les 12 dernières lignes ??? Mais doit bien y avoir une réponse quand même ;-)

Fait du pas à pas avec le debugage de Eclispe pour en être vraiment sur, je pense que tu y gagneras à bien regarder TOUTES les étapes de la JVM ... ;-) Après je pourrais pas beaucoup t'aider plus ;-)

++
0
romuluslepunk Messages postés 11 Date d'inscription mercredi 10 août 2005 Statut Membre Dernière intervention 6 décembre 2006
20 juil. 2006 à 02:46
les INSERT sont bien executé, j'en suis sur, sinon :
<li>j'aurai mes erreur catch()</li><li>j'arriverai pas a les recuperer via SELECT avant la deconnexion</li>Ma connexion est bien fermé, je test avec isClosed() (et il devrait me creer le fichier .script mais il ne le fait pas)

Sous Eclipse, pour le debugage, il suffit de mettre des point d'arret et de lancer via le bouton avec 'une petite puce' ?
Je suis débutant et je comprend pas vraiment tout dans la perspective de debogage, en général je debug avec des test, catch et autre...

L'application fait quelque ko, je la mettrai en ligne demain (là il se fait tard ), si des personnes peuvent tester chez elle (c'est peut etre un problème 'local')...

Demain j'irai revoir la doc.

Déjà un grand merci, je suis sûre qu'on va trouver le bout
0
romuluslepunk Messages postés 11 Date d'inscription mercredi 10 août 2005 Statut Membre Dernière intervention 6 décembre 2006
22 juil. 2006 à 19:23
Désolé j'ai pas su répondre plus tôt.
J'ai regardé à la doc et je n'est pas trouvé de solution

Le programme est ici
Si quelqu'un peut le tester pour voir si ce n'est pas que chez moi que sa pète un plomb

Merci
0
Rejoignez-nous