Creation BDD

Résolu
bmikl59 Messages postés 77 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 14 février 2008 - 14 déc. 2006 à 15:49
bmikl59 Messages postés 77 Date d'inscription lundi 5 septembre 2005 Statut Membre 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

11 réponses

cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
15 déc. 2006 à 11:27
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
++
3
bmikl59 Messages postés 77 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 14 février 2008
14 déc. 2006 à 16:23
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
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
14 déc. 2006 à 18:10
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.

++
0
bmikl59 Messages postés 77 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 14 février 2008
14 déc. 2006 à 18:18
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
0

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

Posez votre question
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
15 déc. 2006 à 08:11
0
bmikl59 Messages postés 77 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 14 février 2008
15 déc. 2006 à 10:53
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?
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
15 déc. 2006 à 11:08
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.

++
0
bmikl59 Messages postés 77 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 14 février 2008
15 déc. 2006 à 11:13
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...
0
bmikl59 Messages postés 77 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 14 février 2008
15 déc. 2006 à 11:38
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
0
bmikl59 Messages postés 77 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 14 février 2008
15 déc. 2006 à 13:25
SUPER
j'ai testé en mettant un statement par execute
il me semble que tout est OK

Merci
0
bmikl59 Messages postés 77 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 14 février 2008
15 déc. 2006 à 13:27
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
0
Rejoignez-nous