Creation BDD [Résolu]

Messages postés
77
Date d'inscription
lundi 5 septembre 2005
Dernière intervention
14 février 2008
- - Dernière réponse : bmikl59
Messages postés
77
Date d'inscription
lundi 5 septembre 2005
Dernière intervention
14 février 2008
- 15 déc. 2006 à 13:27
Bonjour a tous

Voila, je suis actuellement en train de coder une application de gestion de bibliotheque.

Pour la base de donnée, j'ai choisi d'utiliser HSQLDB.
Il m'interresse par sa portabilité

Je fais un test de detecion de la base.
Si celle ci n'existe pas, je lance une connexion qui va créer la bdd et une procedure qui va créer les table de ma bdd :

Voila mon main() :Connexion con new Connexion();File f

new File(
"c:\\Documents and Setting\\MBIA\\Mes Documents\\WorkSpace\\Biblio\\biblio.lck");

//on verifie si la bdd existe deja sur le poste

if (f.exists())con.Connect();

//si oui on se connecte

else{

con.CreateBDD();

//sinon, on la crée avec tte ses tables}

et voila la procedure de création de bdd :




public

String CreateBDD(){

try{

Class. forName (

"org.hsqldb.jdbcDriver").newInstance();

connexion = DriverManager.getConnection(
"jdbc:hsqldb:file:biblio",
"sa",
"");

//ici on appelle la procedure qui va créer les tables de la bddCreateTable();

return
"Connexion OK";}

catch (Exception e){

return
"Connexion NOK";}

}

private

String CreateTable(){

//Ici, on crée les tables de la base de données*

try{

//table nationalite

statement.executeQuery(
"create table NATIONALITE ("+

"id_nat VARCHAR(3) NOT NULL PRIMARY KEY,"+

"lib_nat VARCHAR(15) NOT NULL);");

//table auteur

statement.executeQuery(
"create table AUTEUR ("+

"id_auteur INT NOT NULL GENERATED BY DEFAULT AS IDENTITY(START WITH 1) PRIMARY KEY,"+

"nom_auteur VARCHAR(30)NOT NULL,"+

"prenom_auteur VARCHAR(30) NOT NULL,"+

"remarque VARCHAR(255),"+

"id_nat INT NOT NULL,"+

"FOREIGN KEY(id_nat) REFERENCES NATIONALITE(id_nat));");

....
création de toute mes tables sur le meme principe

...
return
"Creation base de donnée OK";}

catch (SQLException err){

System.

out.print(err.getMessage());

return err.getMessage();}

}

Bon, je vous demande pas de verifier tous le code bien sur mais comme je decouvre HSQLDB, je souhaite un peu d'aide

La1ere question que je me pose est "Est ce que cest correct? (dans l'idée)"
La 2eme est y a t'il un moyen de verifier si les tables sont correctement créer?

J'ai l'impression qui n'execute pas la proc Create Table alors qu'il rentre dedans mais n'envoie pas de retour de try ou de catch mais me renvoie l'erreur Connexion NOK de createBDD

Bon, je sais pas si c'est explicite tous ca donc meaculpa, mais la j'ai un peu de mal

mercipour votre aide
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Dernière intervention
30 août 2012
3
Merci
La je vois pas trop ce qui peut ce passer , essayer de rajouter un peu partout des System.out.println("creation de la table machin"); regarde aussi s'il tu catch toutes les exceptions, et si la base est créer au bon endroit.
il faut peut etre aussi faire un statement par execute
version
stmt = con.createStatement();
stmt.execute....
stmt.close
stmt = con.create....
et ansi de suite
++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de cs_laurent1024
Messages postés
77
Date d'inscription
lundi 5 septembre 2005
Dernière intervention
14 février 2008
0
Merci
OK, vous prenez pas la tete avec le post de ouf que j'ai mis avant, on va reduire la zone de recherche

La procedure qui merde, c'est bien createtable()
il plante au premier statement.executequery

Je vais analyser mes requete
Commenter la réponse de bmikl59
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Dernière intervention
30 août 2012
0
Merci
Salut.
Une petite remarque, au lieu de faire un system.out.println(ex.getMessage()); tu fait un e.printStackTrace(), cela permet d'avoir directement la ligne qui deconne.
Il faudrait que tu donne le message d'erreur qu'il y a pour que l'on puisse aider.
Apres il faut peut etre pas mettre de point virgule dans tes requetes (c'est juste une idée car dans certaine bases de données les ";" donne des erreurs de syntaxe sql)
Il faudrait que teste séparément tes requetes sql pour voir s'il elle sont correctes.

++
Commenter la réponse de cs_laurent1024
Messages postés
77
Date d'inscription
lundi 5 septembre 2005
Dernière intervention
14 février 2008
0
Merci
oui, alors j'ai avance un peu

tout d'abord pour lancer des requete il faut initialiser le statement :

Statement statement = connexion.CreateStatement();

apres, pour creer des table, il ne faut pas utiliser la methode executequery de l'objet statement mais la methode executeupdate

Ce qui m'amene à un nouveau probleme, la syntaxe sql reconnu par HSQLDB

J'ai utilisé la meme syntaxe de création de table que j'utilse pour une bdd MySQL, mais ce coup ci , il m'envoi chier sur la table AUTEUR
La 1ere table passe donc les commande sont correcte, c'est surement sur la syntaxe de create table qui m'embete(ptet le foreign key pour la clé secondaire)

Je continue a chercher
Commenter la réponse de bmikl59
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Dernière intervention
30 août 2012
Commenter la réponse de cs_laurent1024
Messages postés
77
Date d'inscription
lundi 5 septembre 2005
Dernière intervention
14 février 2008
0
Merci
trop bizarre, j'ai des procedure correctes
alors ce qui se passe, c'est que quand j'execute le programme pas a pas (avec eclipse), il me créer bien mes tables (je verifie dans le script genere par HSQLDB j'ai bien tous mes créate table)
mais quand j'execute directement sans passe pas le debug, je ne les ai pas

d'ou peut venir cette difference d'execution?
Commenter la réponse de bmikl59
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Dernière intervention
30 août 2012
0
Merci
Dans ton code on vois pas si tu as fermé ton statement et ta connexion, je sais pas si ca va résoudre ton problème, mais ca peut géner le fonctionnement de ta base. Si tu execute ton programme en mode normal, il va peut etre se terminer sans avoir fermer les connexions à la base de données et du coup, il n'y a pas de "commit" de fait.

++
Commenter la réponse de cs_laurent1024
Messages postés
77
Date d'inscription
lundi 5 septembre 2005
Dernière intervention
14 février 2008
0
Merci
c'est fait, j'ai rajouter
statement.close();
connexion.commit();
connexion.close();

mais le probleme reste le meme :
en testant pas a pas, j'ai mes tables qui se créent
en testant sans pas a pas, je ne les ai pas...
Commenter la réponse de bmikl59
Messages postés
77
Date d'inscription
lundi 5 septembre 2005
Dernière intervention
14 février 2008
0
Merci
oui, c'est la methodologie que j'utilise
mais je pense avoir trouver leprobleme

Avec HSQLDB, les modif de la bdd se font en memoire, je viens de m'apercevoir que pour enregistrer le tout sur de dur, il faut

statement.executequery(SHUTDOWN);

et apres on peut fermer la connexion
la je retrouve bien un fichier .script avec toutes mes requetes

Maintenant je vais essayer de voir si lorsque on se reconnecte, il recupere bien mes table

Merci pour ton aide
Commenter la réponse de bmikl59
Messages postés
77
Date d'inscription
lundi 5 septembre 2005
Dernière intervention
14 février 2008
0
Merci
SUPER
j'ai testé en mettant un statement par execute
il me semble que tout est OK

Merci
Commenter la réponse de bmikl59
Messages postés
77
Date d'inscription
lundi 5 septembre 2005
Dernière intervention
14 février 2008
0
Merci
c'est bien ca
un statement par execute

ne pas oublié le shutdown pour vider la memoire sur le disque dur et à la reconnecyion de la bdd, il charge les propriete pour reformer la base de donnée
Commenter la réponse de bmikl59

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.