IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Debutant JDBC PreparedStatement


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 68
    Par défaut Debutant JDBC PreparedStatement
    Bonjour à tous.

    Voilà deux jours que je bute sur un simple probleme.

    Je travaille avec une base Oracle 10g, j'utilise le jdbc fournit avec le CD client d'Oracle.

    Mon problème survient lors de l'utilisation de la CLAUSE WHERE.

    En effet ce bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    PreparedStatement ps=conn.prepareStatement("UPDATE RLV_INDEX SET ETAT_ENREG=?, UTILMODIF=? WHERE ETAT_ENREG='STRING3'");
    		ps.setString(1, "STRING1");
    		ps.setString(2, "STRING2");
    		rc=ps.executeUpdate();
    fonctionne très bien.

    Par contre celui-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PreparedStatement ps=conn.prepareStatement("UPDATE RLV_INDEX SET ETAT_ENREG=?, UTILMODIF=? WHERE ETAT_ENREG=?");
    		ps.setString(1, "STRING1");
    		ps.setString(2, "STRING2");
    		ps.setString(3, "STRING3");
    		rc=ps.executeUpdate();
    ne fonctionne pas.

    Que je fasse des select (avec un executequery) ou des updates, ou des delete le passage d'un String à la clause where via un setString ne fonctionne pas.

    Attention quand je dis ne fonctionne pas, c'est qu'il ne me retourne aucun champ lors d'un select ou qu'il ne me fait aucune modif lors d'un update. Or l'autre méthode (avec le string en dur dans la requête), elle m'affiche bien les champs voulu ou me font bien les bonnes modifs.

    Je ne comprend vraiment pas d'où cela peut provenir, j'en appelle aux professionnels des BD via jdbc. Car dans ma boite personne n'a pu trouvé la solution.

    Ah oui, j'utilise une JDK 1.5.

  2. #2
    Membre Expert
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Par défaut
    Hello,

    En effet, c'est bizarre..

    Est ce que tu as vérifié la valeur STRING3 qui est donnée dynamiquement?
    Est ce que cette valeur est correcte?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 68
    Par défaut
    Merci pour cette réponse très rapide!!!

    Alors pour ce qui est de la valeur STRING3, je ne peux pas la vérifier une fois la requete créé avec ses arguments.

    Par contre ce que j'ai fait, je fais un affichage de la requete SQL avant precompilation (donc avec les ?), et j'affiche les variables que je passe avec le SetString.

    J'ai repris chacune de ces données, et je les ai mis dans une PreparatedStatement (donc en substituant chacun des ? par la valeur attendu) et cela marche très bien.

    Si tu as une technique pour afficher la requête avec ses variables une fois qu'elle est intitialisée (sans passé par la librairie dont j'ai entendu parler qui a l'air assez lourde à mettre en place) je suis preneur.

    Merci d'avance...

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Questions en passant :

    - ta valeur pour le paramètre 3 (clause where), tu la fournis comment ?
    - la valeur "STRING3" est réelle ou c'est pour l'exemple ?

    Le problème pourrait être lié à l'encoding
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre chevronné

    Homme Profil pro
    Chomeur
    Inscrit en
    Juin 2006
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chomeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 347
    Par défaut
    Salut à tous,

    _Cheval_ as tu essaye quelquechose comme ca: update ... where ETAT_ENREG='?' ou alors dans ton string: string3="'monString'"

    Bon courage,
    Tif

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 68
    Par défaut
    Citation Envoyé par TIFéç
    Salut à tous,

    _Cheval_ as tu essaye quelquechose comme ca: update ... where ETAT_ENREG='?' ou alors dans ton string: string3="'monString'"

    Bon courage,
    Tif
    Oui j'ai déjà essayé ces deux solutions.

    La première me lève une SQLException:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Index de colonne non valide
    La seconde quant à elle réagit de la même façon c'est à dire avec aucun champ modifié dans le cas d'un Update ou 0 champ retourné dans le cas d'un SELECT.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 68
    Par défaut
    Désolé j'étais persuadé de t'avoir répondu hier!!

    Alors STRING3 c'est pour l'exemple.

    En fait j'ai fait pas mal d'essai, tel que faire des chose comme new String ou bien encore des StringBuffer.toString(),etc....

    Donc dans mes essais différents essai j'ai essayé par exemple un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ps.setString (3,"VALEUR_CHERCHE");
    ou bien encore des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String valeur="VALEUR_CHERCHE";
    ps.setString (3,valeur);
    J'ai même essayé des choses farfelus comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String valeur="VALEUR_CHERCHE";
    ps.setString (3,valeur.trim().toString());
    En effet, peut être le problème est lié à l'encodage, donc si c'est le cas, comment pourrais je le résoudre??

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Il faudrait :
    1) regarder le charset utiliser par la base/table/colonne
    2) adapter le parametre en fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pstmt.setString(3, new String(laSource.getBytes(), "ISO-8859-1");
    (Quelque chose comme ça)

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 68
    Par défaut
    Citation Envoyé par OButterlin
    Il faudrait :
    1) regarder le charset utiliser par la base/table/colonne
    Comment puis je accéder à cette information.

    Sous toad lorsque je fais un je ne vois aucune information de ce genre.

    Quelle commande me permettrais d'accéder au charset d'un de mes champs sous Oracle.

    Ce que je sais pour l'instant (vu que c'est moi qui est créé ma table), c'est que mes champs sont des char de maximum 20 caractères.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [debutant] jdbc
    Par stoukou dans le forum JDBC
    Réponses: 8
    Dernier message: 27/02/2006, 17h10
  2. Réponses: 1
    Dernier message: 08/11/2005, 14h32
  3. [debutant] jdbc et classpath !!!!
    Par christophebmx dans le forum JDBC
    Réponses: 7
    Dernier message: 12/09/2005, 22h22
  4. [debutant][jdbc]driver introuvable
    Par debdev dans le forum JDBC
    Réponses: 10
    Dernier message: 11/05/2005, 11h52
  5. [debutant][JDBC]
    Par zozolh2 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 24/05/2004, 18h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo