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 :

[Débutant][JDBC] Problème avec des PreparedStatement


Sujet :

JDBC Java

  1. #1
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut [Débutant][JDBC] Problème avec des PreparedStatement
    Bonjour,

    j'ai un petit problème avec l'execution d'un PreparedStatement..

    Je suis débutant JDBC et pas Java donc je suis sur que le problème vient soit de mon utilisation de JDBC, soit du driver..

    Contexte:
    Oracle 10g en version d'évaluation
    Windows XP
    Driver JDBC: ojdbc14.jar.zip (Telechargé chez Oracle)

    Problème:

    Si j'execute cette requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ResultSet res = s.executeQuery("SELECT lastname FROM customers");
    J'obtiens bien la liste des lastname de mes customers.

    Si j'execute cette requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          PreparedStatement prep = connection.prepareStatement("SELECT lastname FROM customers");
     
          ResultSet res = prep.executeQuery();
    Ca marche pareil.

    Par contre avec cette requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          PreparedStatement prep = connection.prepareStatement("SELECT ? FROM customers");
          prep.setString(1, "lastname");
     
          ResultSet res = prep.executeQuery();
    J'obtiens comme resultat la chaine "lastname" autant de fois que j'ai de clients ..

    Pour info voici comment j'initialise ma connection et il n'y a pas d'exception lors de l'execution..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        String url = "jdbc:oracle:thin:@localhost:1521:maBase";
        String login = "user";
        String pass = "pass";
     
        OracleDriver driver = new OracleDriver();
        DriverManager.registerDriver(driver);
     
        connection = DriverManager.getConnection(url, login, pass);
    Merci d'avance pour l'aide que vous pourrez m'apporter..

    Bulbo

  2. #2
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Je pense que utilises mas le PreparedStatement, je n'ai jamais vu de ? placé à cet endrois...


    Les PreparedStatement je les utilises pour un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select lastName from customers where customer_id = ?
    Je pense que ta requête reviens à faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select 'lastName' from customers
    Je pense que pour chaque valeur tuple selectionné il te renvoie la chaîne lastName au lieu de la colonne lastName ce qui me semble logique va la requête...

    De plus je ne comprends pas pourquoi tu veux faire ça...


  3. #3
    Expert éminent

    Avatar de christopheJ
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 600
    Points : 8 235
    Points
    8 235
    Par défaut
    Il me semble que le PreparedStatement ne permet pas de définir les champs que tu veux dans ton select... Il permet de fixer les critères de la sélection.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT lastname FROM customers WHERE name=?
    Ou encore dans un update, les valeurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE customers SET lastname = ? WHERE name = ?
    Edit : Argh, grillé pour une minute, pour une fois que je pouvais aider Bulbo...

  4. #4
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Merci pour les infos, je vais voir ça plus en detail..

    Pour thibaut: Il n'y a pas d'autre raison de faire ça que celle de me mettre un peu JDBC dans les pattes (on s'occupe comme on peu en inter-contrat )

    Bulbo

  5. #5
    Membre émérite
    Avatar de Ioan
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 737
    Points : 2 999
    Points
    2 999
    Par défaut
    Salut,
    Erreur de ma part à corriger dans la FAQ
    En effet, dans ce cas le driver va remplacer ton paramètre lastname en 'lastname' dans l'instruction SQL.
    Pour ma défense, ce type de passage de paramètre et possible avec les RowSet. Cf. la prochaine mise à jour de la FAQ
    Pour faire ce que tu veux, tu pourrais utiliser une procédure stockée qui elle pourrais prendre en paramètre les colonnes ciblées.
    @+

  6. #6
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Iner-Contrat ...

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

Discussions similaires

  1. Problèmes avec des exos de débutant
    Par Seedockh dans le forum Langage SQL
    Réponses: 8
    Dernier message: 11/06/2010, 14h57
  2. [JDBC]Problème avec PreparedStatement
    Par tomca dans le forum JDBC
    Réponses: 15
    Dernier message: 08/07/2005, 13h59
  3. [STRUTS] Problème avec des ActionForm
    Par zarbydigital dans le forum Struts 1
    Réponses: 2
    Dernier message: 29/03/2004, 13h49
  4. [JDBC] Problème avec les accents
    Par seawolfm dans le forum Administration
    Réponses: 2
    Dernier message: 29/01/2004, 14h56
  5. Problèmes avec des vues
    Par dady dans le forum MFC
    Réponses: 22
    Dernier message: 09/01/2004, 16h26

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