Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/04/2007, 10h17   #1
Invité régulier
 
Étudiant
Inscription : avril 2007
Messages : 19
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2007
Messages : 19
Points : 8
Points : 8
Par défaut [JDBC] Problème avec l'insertion d'un champ Null

Bonjour à toutes et à tous,

Je vais vous expliquer mon problème. J'ai une table avec des mot clé (un thésaurus). Donc il y a des mots pères et d'autre fils. Chaque mot possède un identifiant, un libelle ainsi que l'identifiant de son mot père (normal jusque là).

Le souçi c'est que les mots "racines" n'ont pas d'identifiant père. Donc il suffit d'insérer la valeur null dans le champs idfpere mais après moult essai j'ai été voir la FAQ JDBC et j'ai essayé ce qui étais marqué ce qui me donne comme code :

Code :
1
2
3
4
 
RequeteMot = "INSERT INTO CDmotcle (idf, idfpere, libelle, commentaire, validation) VALUES (nextval(\'idf\'), ?, \'"+mot+"\', \'"+commentaire+"\', \'FALSE\');";
PreparedStatement stMot = bdd.prepareStatement(RequeteMot);
stMot.setNull(2);
Mais cela me donne l'erreur suivante :

cannot resolve symbol
symbol : method setNull (int)
location: interface java.sql.PreparedStatement
stMot.setNull(2);

Si vous pouviez m'aider car là je bloque sachant que j'ai essayer d'autres choses auparavant comme enregistrer la valeur NULL sans les quotes comme en PHP par exemple ...
Bluephoenix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 10h28   #2
Membre actif
 
Avatar de budtucker
 
Développeur multimédia
Inscription : avril 2007
Messages : 175
Détails du profil
Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : avril 2007
Messages : 175
Points : 174
Points : 174
Peut être qu'en appelant tout simplement pas idfpere lors de ton insertion, ça suffirait :
Code :
"INSERT INTO CDmotcle (idf, libelle, commentaire, validation) VALUES (nextval(\'idf\'), \'"+mot+"\', \'"+commentaire+"\', \'FALSE\');"
budtucker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 10h35   #3
Invité régulier
 
Étudiant
Inscription : avril 2007
Messages : 19
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2007
Messages : 19
Points : 8
Points : 8
Bonne idée mais j'avais déjà essayer, lorsque l'on fait ca PostgreSQL nous renvoie gentiment ce message :

ERROR: invalid input syntax for integer: ""

Donc ca ne marche pas, si quelqu'un à une autre idée je suis preneur ^^.
Bluephoenix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 10h38   #4
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
Bonjour,

ce ne serait pas plutôt parce que tu passes 2 à setNull() alors qu'il n'y a qu'un paramètre dans la requête paramétrée ? Ce ne devrait pas être 1 ?
__________________
FAQ XML
------------
« Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
Giacomo Leopardi
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 10h41   #5
Membre actif
 
Avatar de budtucker
 
Développeur multimédia
Inscription : avril 2007
Messages : 175
Détails du profil
Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : avril 2007
Messages : 175
Points : 174
Points : 174
Autant mettre -1 à la valeur integer. Tu la traites ensuite dans ton code.
budtucker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 10h51   #6
Invité régulier
 
Étudiant
Inscription : avril 2007
Messages : 19
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2007
Messages : 19
Points : 8
Points : 8
GrandFather tu as raison c'est bien 1, erreur bête mais l'erreur reste la même :"

cannot resolve symbol
symbol : method setNull (int)
location: interface java.sql.PreparedStatement
stMot.setNull(1);

Je pense que je vais opter pour la solution du -1 même si j'aurai bien voulu trouver la solution pour insérer une valeur null dans un champs de type Integer.

En tout merci pour vos réponse.
Bluephoenix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 10h59   #7
Membre actif
 
Avatar de budtucker
 
Développeur multimédia
Inscription : avril 2007
Messages : 175
Détails du profil
Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : avril 2007
Messages : 175
Points : 174
Points : 174
Pourquoi ne pas mettre directement null dans ton SQL. Je viens de faire le test, et ça marche très bien :

Code :
"INSERT INTO CDmotcle (idf, idfpere, libelle, commentaire, validation) VALUES (nextval(\'idf\'), NULL, \'"+mot+"\', \'"+commentaire+"\', \'FALSE\');";
Dans tous les cas, comme pour le -1, il faudra traiter par la suite dans ton code.

A+
budtucker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 11h02   #8
Invité régulier
 
Étudiant
Inscription : avril 2007
Messages : 19
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2007
Messages : 19
Points : 8
Points : 8
Pour information sous PostgreSQL, la requête :

Code :
1
2
 
INSERT INTO CDmotcle VALUES (NEXTVAL('idf'),NULL,'Test','terme racine',TRUE);
fonctionne très bien
Bluephoenix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 11h05   #9
Membre actif
 
Avatar de budtucker
 
Développeur multimédia
Inscription : avril 2007
Messages : 175
Détails du profil
Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : avril 2007
Messages : 175
Points : 174
Points : 174
Où est le problème alors ?? Il suffit de remplacer ton "?" par Null dans ta variable RequeteMot étant donné que c'est un String.

Où alors j'ai pas bien saisis !!!
budtucker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 11h11   #10
Invité régulier
 
Étudiant
Inscription : avril 2007
Messages : 19
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2007
Messages : 19
Points : 8
Points : 8
Non ca ne veut vraiment pas ... je comprends pas là. La requête suivante :

Code :
1
2
 
"INSERT INTO CDmotcle (idf, idfpere, libelle, commentaire, validation) VALUES (nextval(\'idf\'), NULL, \'"+mot+"\', \'"+commentaire+"\', \'FALSE\');";
ne passe pas ... j'ai toujours l'erreur : org.postgresql.util.PSQLException: ERROR: invalid input syntax for integer: ""

Je comprends vraiment pas là ...
Bluephoenix est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h00.


 
 
 
 
Partenaires

Hébergement Web