Problème générer un INSERT [JDBC] - Java - Programmation
Marsh Posté le 14-04-2004 à 09:08:45
Bonjour.
Je vois trois éléments dans ton code et ta conception qui peuvent produire des erreurs :
- dans la clause INTO de ton code SQL, tu n'indiques pas les colonnes dans lesquelles tu comptes insérer tes valeurs. Ca complique le débuggage... d'ailleurs à quoi correspondent les différentes colonnes ? (j'imagine que AXXX est ta clé, par contre pour le reste je ne comprends pas bien le NEWBY et le GB)
- le fait d'utiliser un toString implicite te complique plus la tâche qu'autre chose : on ne sait pas exactement ce que tu insères ; il faut aller voir dans ta classe, donc on ne peut pas vérifier de manière directe que tu ne fais pas d'opération incorrecte
- les chaînes de caractères (CHAR(X)) en SQL sont à encadrer par des apostrophes (simple quotes) => normalement il faut faire :
Code :
|
De manière générale, pour éviter les concaténations hasardeuses, mieux faut utiliser un PreparedStatement qu'un statement simple : celui-ci te permet de passer ton code SQL sous forme d'une chaîne de caractères comportant des "?" à la place des valeurs à insérer. Tu dois ensuite faire sur ton statement des setString, setDate, etc., ce qui t'évite les erreurs de type et les conversions à la volée.
Marsh Posté le 14-04-2004 à 21:10:36
Derniere petite question. Quel est la methode normale pour faire ce genre d'operation ?
Devrais-je faire les operations sql au niveau de l'objet Auteur ?
Marsh Posté le 14-04-2004 à 21:37:07
swgreedo a écrit : :
|
heu ... là ca insert qu'un seul champ ... dans sa table il doit avoir plusieurs champs j'imagine ...
Marsh Posté le 14-04-2004 à 22:46:31
aaaaaaaaarrgh
utilise des "prepared statements", je t'en supplie ! y'en a marre des bugs de sécurité sur des histoires d'échappement, de magic quotes et autres délires psychédéliques !
Code :
|
puis un "bind" de la valeur au "statement" en première position avant exécution.
Marsh Posté le 14-04-2004 à 23:13:15
benou a écrit : |
le monsieur a dit que le toString() d'Auteur (dont a est une instance) renvoyait "nom, machin,truc"
Marsh Posté le 14-04-2004 à 23:14:10
belzme a écrit : Derniere petite question. Quel est la methode normale pour faire ce genre d'operation ? |
Non.
on utilise en general un objet "DAO" (data access object) qui n'est responsable que de ces operations. et sur ta classes Auteur, tu fournis les accesseurs qui vont bien (getName(), getMachin(), getTruc())
Marsh Posté le 14-04-2004 à 23:33:52
the real moins moins a écrit : le monsieur a dit que le toString() d'Auteur (dont a est une instance) renvoyait "nom, machin,truc" |
tu blagues ou pas là ?
j'imagine que nom, machin et truc sont 3 champs séparés de la table ...
Marsh Posté le 14-04-2004 à 23:34:46
benou a écrit : |
ben non je blague pas, il l'a dit.
et comme il concatene ça dans une String, beh ça devrait marcher
Marsh Posté le 14-04-2004 à 23:35:55
euh bon on efface, j'ai rien dit. tu quotais la réponse ou jgreedo lui disait de mettre des ', au temps pour moi
Marsh Posté le 15-04-2004 à 00:39:17
Ok merci pour la réponse du DAO.
Pour ce qui est du reste, si j'utilisais le toString, c'est que je voulais mettre le moins d'effort possible pour ce travail car en ce moment au boulot je fait bcp d'heure et j'ai pas bcp de temps a investir dans mon cours.
Cependant, je vais quand même faire ca plus propre pour ma conscience (Un preparedStatement qui en utilisant les get de mon objet a insérer dans la bd)
Merci bcp pour vos réponses !
Marsh Posté le 14-04-2004 à 04:52:32
Bonjour.
Alors voila en gros j'ai deja fait un programme pour un cours qui utlisait une classe pour "émuler" une base de données. J'ai déjà remis ce travail, cependant je dois remplacer ma classe Bdd par une vrai bd.
Voici un exemple de fonction que j'ai :
mon toString retourne "code,nom,prenom" donc parfait pour mon insert.
Cependant, le probleme est que le nom est composé de la façon suivante :
"NOM, PRENOM".
Bien entendu quand j'appelle la fonction addAuteur j'ai l'erreur suivante :
General error, message from server: "Column count doesn't match value count at row 1"
Requête : INSERT INTO auteur VALUES (A001,NEWBY, ERIC,GB)
Donc comment faire pour que NOM, PRENOM ne soit traité comme une seule values (Je ne peux pas séparer nom/prénom dans la bd et je dois le garder sous cette forme).
Il est plutôt tard, donc si je ne suis pas clair n'hésitez pas à me le dire et j'essayerais de préciser !
Merci !