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 :

Effectuer un IN proprement


Sujet :

JDBC Java

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 93
    Points : 90
    Points
    90
    Par défaut Effectuer un IN proprement
    Bonjour
    Merci d'avance pour tout d'aide apportée.
    Ma question est tout simple , est ce que quelqu'un connait une méthode propre pour effectuer un IN ?
    J'ai une liste de String et j'aimerais effectuer une requête avec un IN sur ma liste de String.
    Je considère que parcourir la liste pour concaténer les éléments en les séparant par une virgule est moche .
    J'ai cru que les NamedParameterJdbcTemplate serait ma solution mais mon utilisation de cette classe ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    private List<String> getLoginAppliByDep(String departmentShortName) throws LdapException {
    	LdapUserDao dao = new LdapUserDao();
    	List<String> logins = dao.getLoginNTByDep(departmentShortName);
     
    	MapSqlParameterSource parameters = new MapSqlParameterSource();
    	parameters.addValue("appli_name", CommonConstants.APPLI_NAME_MEDIA);
    	parameters.addValue("logins", logins);
     
    	NamedParameterJdbcTemplate jt = new NamedParameterJdbcTemplate(Resources.IA_DS);
    	// récup des réalisation des différents usr_typ pour l'équipe
    	String my_query = "SELECT *** FROM *** i WHERE ***= :appli_name AND *** IN (:logins) ";
     
    	List<String> loginsAppli = jt.query(my_query, parameters, new RowMapper() {
    	public Object mapRow(ResultSet rs, int arg1) throws SQLException {
    		return rs.getString("***");
    	}
    	});
    	return loginsAppli;
    }
    j'obtiens
    Exception in thread "main" javax.ejb.EJBException: Exception in a business interface with REQUIRED TX attribute
    at org.ow2.easybeans.transaction.interceptors.AbsTransactionInterceptor.handleContextContainerTransaction(AbsTransactionInterceptor.java:413)

    Caused by: org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [SELECT *** FROM *** i WHERE *** = ? AND *** IN (?, ?) ]; SQL state [JZ0SA]; error code [0]; JZ0SA: Instruction préparée : paramètre d'entrée non configuré, index : 2.; nested exception is java.sql.SQLException: JZ0SA: Instruction préparée : paramètre d'entrée non configuré, index : 2.
    at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.translate(SQLStateSQLExceptionTranslator.java:96)
    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.translate(SQLErrorCodeSQLExceptionTranslator.java:257)

    Caused by: java.sql.SQLException: JZ0SA: Instruction préparée : paramètre d'entrée non configuré, index : 2.
    at com.sybase.jdbc3.jdbc.ErrorMessage.raiseError(Unknown Source)
    at com.sybase.jdbc3.tds.TdsParam.prepareForSend(Unknown Source)
    at com.sybase.jdbc3.jdbc.ParamManager.checkParams(Unknown Source)
    donc à priori la liste qui fait bien 2 éléments de long à bien été remplacée par 2 ? mais au moment de remplacer les ? par les arguments, ma méthode échoue
    Je suis donc preneur de toute correction ou autre méthode arrivant au bon résultat

    Merci

  2. #2
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 93
    Points : 90
    Points
    90
    Par défaut
    Je ne sais pas si ça intéresse quelqu'un mais j'ai trouvé une solution propre.
    J'étais bien parti sur la bonne piste, il fallait ajouter un typage des paramètres.
    Pour ceux qui voudrait un code exemple me MP

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/05/2013, 12h24
  2. [MySQL] Comment effectuer ses requêtes multiple proprement ?
    Par starr dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 12/08/2007, 22h36
  3. Réponses: 5
    Dernier message: 10/06/2004, 21h00
  4. [Builder] Effectuer une opération quand une resource a changé
    Par Satch dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 08/04/2004, 13h22
  5. [GNU Pascal] [GRX] Effectuer des actions pendant un temps d'arrêt (GRSleep)
    Par the_guitariste dans le forum Autres IDE
    Réponses: 3
    Dernier message: 03/04/2004, 18h21

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