+ Répondre à la discussion
Affichage des résultats 1 à 9 sur 9
  1. #1
    Membre du Club
    Inscrit en
    septembre 2006
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 199
    Points : 42
    Points
    42

    Par défaut Transmettre un paramètre à une requête

    Bonjour,

    Je ne vois pas comment mettre une String dans la clause WHERE.

    Je récupère au niveau d'une page JSP un paramètre soumis par la page d'authentification, puis je lance un select avec le paramètre reçu par la seconde page.

    Voici mon bout de code:
    Code :
    1
    2
    3
    4
    5
    6
    7
    <c:set var="newUsername" value="${!empty param.username}"/>
    <%--<c:out value="${param.username}"/> --%>
    <sql:query var="applicantInfo" scope="session" dataSource="jdbc:odbc:LeaveRequest">
        SELECT UserName, FirstName, LastName, Email, Tel FROM Users 
        WHERE UserName = ? <sql:param value="${newUsername}"/>
    </sql:query>
    <c:set var="applicantDetails" value="${applicantInfo.rows[0]}"/>
    au niveau de WHERE, ça ne fonctionne pas parce que le paramètre est une chaine de caractères.

    Quelqu'un saurait-il m'indiquer comment faire ?

    Merci d'avance pour votre aide.

  2. #2
    Membre du Club
    Inscrit en
    septembre 2006
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 199
    Points : 42
    Points
    42

    Par défaut

    Voila, Je reformule ma requête pour être plus claire.
    Qui a une idée, comment utiliser une variable (chaine de caractères) dans une tag sql:query?
    Premièrement, j'assigne une chaine (qui vient d'un paramètre) a une variable
    Code :
    <c:set var="newUsername" value="${!empty param.username}"/>
    Puis, j'utilise cette variable au niveau du WHERE
    Code :
    1
    2
    3
    4
    <sql:query var="applicantInfo" scope="session" dataSource="jdbc:odbc:LeaveRequest">
        SELECT UserName, FirstName, LastName, Email, Tel FROM Users 
        WHERE UserName =  ? <sql:param value="${newUsername}"/>
    </sql:query>
    Pourquoi le select ne fonctionne pas?
    Merci.

  3. #3
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Inscrit en
    novembre 2008
    Messages
    891
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : novembre 2008
    Messages : 891
    Points : 3 304
    Points
    3 304

    Par défaut

    Bonjour,

    Je doute fort que ça pourrait vous aider mais généralement en SQL on utilise le mot reservé "LIKE" pour comparer des chaînes de caractères...

  4. #4
    Membre du Club
    Inscrit en
    septembre 2006
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 199
    Points : 42
    Points
    42

    Par défaut

    Bonjour Mishulyna,

    J'ai essayé ave LIKE, mais ça ne fonctionne tuojours pas.
    erreur:
    SELECT Email FROM Users
    WHERE Group LIKE ?
    : [Microsoft][ODBC Microsoft Access Driver] Syntax error in WHERE clause.


    le parametre du WHERE est une string, c'est peut etre la raison que ça marche pas!!!!

  5. #5
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Inscrit en
    novembre 2008
    Messages
    891
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : novembre 2008
    Messages : 891
    Points : 3 304
    Points
    3 304

    Par défaut

    Bonjour machipot,

    La recherche de l'utilisateur fonctionnait tout à l'heure, alors "LIKE" n'est pas indispensable, tant mieux: http://www.developpez.net/forums/d12...omprehensible/

    As-tu plusieurs Users du même UserName? "Group" est une valeur unique par utilisateur ou tu recherches une liste d'utilisateurs appartenant au même Group (peut-être il faudrait prévoir une boucle quelque part)?

  6. #6
    Membre du Club
    Inscrit en
    septembre 2006
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 199
    Points : 42
    Points
    42

    Par défaut

    Mishulyna,

    J’ai qu'un seul et unique user Name dans la table, mais c'est le SQL qui donne une erreur. Je ne trouve pas comment faire la différence entre un entier et une chaine de caractères au niveau du WHERE.
    Est-ce que le paramètre se fait de la même façon dans les deux cas de figure?
    Integer, ça marche:
    Code :
    1
    2
    3
    4
    5
     
    <sql:query var="applicantInfo" scope="session" dataSource="jdbc:odbc:LeaveRequest">
        SELECT UserName, FirstName, LastName, Email, Tel FROM Users 
        WHERE EmployeeID = ? <sql:param value="${sessionScope.employeeID}"/>
    </sql:query>
    string ne marche pas!!!
    Code :
    1
    2
    3
    4
    5
     
    <sql:query var="supervisorsInfo" scope="session" dataSource="jdbc:odbc:LeaveRequest">
        SELECT Email FROM Users 
        WHERE Group = ? <sql:param value="${sessionScope.group}"/>
    </sql:query>

  7. #7
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Inscrit en
    novembre 2008
    Messages
    891
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : novembre 2008
    Messages : 891
    Points : 3 304
    Points
    3 304

    Par défaut

    Désolée, j'avais lu ça et compris que ça fonctionnait...

    Citation Envoyé par machipot Voir le message
    Bonjour,

    J'aimerais comprendre pourquoi le code SQL suivant fonctionne :
    Code :
    1
    2
    3
    4
    5
    <%request.getSession();%>
    <sql:query var="applicantInfo" scope="session" dataSource="jdbc:odbc:LeaveRequest">
        SELECT UserName, FirstName, LastName, Email, Tel FROM Users 
        WHERE UserName = ? <sql:param value="${sessionScope.sessionUsername}"  />
    </sql:query>
    ...

    Je viens de faire un tour sur Google, j'ai trouvé:

    The JSP expression language defines the following literals:

    •Boolean: true and false
    •Integer: as in Java
    •Floating point: as in Java
    String: with single and double quotes; " is escaped as \", ' is escaped as \', and \ is escaped as \\.
    •Null: null
    il faudrait peut-être préciser d'une façon quelconque que le paramètre "${sessionScope.group}" est une variable de type String et pas de type Integer comme "${sessionScope.employeeID}" ?

  8. #8
    Membre du Club
    Inscrit en
    septembre 2006
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 199
    Points : 42
    Points
    42

    Par défaut

    c'est ça que je n'arrive pas a figurer...
    j'ai beau cherché dans les tag jstl, sans succè...

    A+

  9. #9
    Invité de passage
    Homme Profil pro
    Inscrit en
    décembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : décembre 2012
    Messages : 2
    Points : 1
    Points
    1

    Par défaut

    C'est peut-être un peu tard et je ne sais pas si ça va marcher non plus mais est-ce que t'as essayé un truc du genre:

    Code :
    WHERE UserName = ? <sql:param value="\'${sessionScope.sessionUsername}\'"
    En effet, quand tu utilises un WHERE en sql avec un varchar2 tu dois mettre ton varchar2 entre '...'

    Pour ton exemple:

    Code :
    1
    2
    SELECT UserName, FirstName, LastName, Email, Tel FROM Users 
        WHERE UserName = 'Toto'

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •