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

Spring Java Discussion :

Problème de jdbctemplate


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 5
    Par défaut Problème de jdbctemplate
    Bonjour,

    dans mon application java Spring j'utilise la fonction queryforlist de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    protected List selectObjetsParentsInseres(final AbstractEntite<Long>[] abstractEntites) {
        //     on récupère seulement les objets qu'on vient d'insérer
     
            final List objetDepotIds = jdbcTemplate.queryForList("select SY_TRACE_OBJ from "
                    + "(select SY_TRACE_OBJ from TRACE_OBJET where SY_TRACE_DPOT=? order by SY_TRACE_OBJ desc)"
                    + " where ROWNUM <= ? order by SY_TRACE_OBJ asc", new Object[] {
                    ((AbstractBETraceObjet) abstractEntites[0]).getTraceDepot().getIdentifiant(), abstractEntites.length });
            return objetDepotIds;
        }
    Le problème que je rencontre avec cette fonction selectObjetsParentsInseres est qu'il me retourne toujours 10 éléments au niveau de la fonction queryforList quand abstractEntites.length a une valeur supérieure à 10. Cependant, quand je remplace le contenu de la fonction par ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        protected List selectObjetsParentsInseres(final AbstractEntite<Long>[] abstractEntites) {
            final List objetDepotIds = jdbcTemplate.queryForList(
                    "select SY_TRACE_OBJ from TRACE_OBJET where SY_TRACE_DPOT=? order by SY_TRACE_OBJ asc",
                    new Object[] { ((AbstractBETraceObjet) abstractEntites[0]).getTraceDepot().getIdentifiant() });
            return objetDepotIds;
        }
    queryForList fonctionne correctement, sauf que le ROWNUM est indispensable au niveau fonctionnel.

    J'ai beau faire des recherches sur Google mais je ne trouve rien pour l'instant

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonsoir,

    Pourquoi tu utilises une requête select imbriqué or qu'une clause AND satisfait ton besoin?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    final List objetDepotIds = jdbcTemplate.queryForList("select SY_TRACE_OBJ from TRACE_OBJET where SY_TRACE_DPOT=? AND ROWNUM <= ?"
            , new Object[] {((AbstractBETraceObjet) abstractEntites[0]).getTraceDepot().getIdentifiant(), abstractEntites.length });
    Vérifie ensuite la requête directement dans la base.

    A+.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 5
    Par défaut
    Bonsoir Andry,

    merci pour ta réponse.
    Au fait j'ai construit la requête ainsi pour pouvoir récupéré les "derniers" objets insérés dans la table TRACE_OBJET grâce au tris. d'abord avec le "order by SY_TRACE_OBJ desc" dans la requête imbriqué, ensuite avec le "order by SY_TRACE_OBJ asc".

    la requête que tu m'as passé marche dans la base mais ne corrige pas le problème dans mon application java Spring.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 5
    Par défaut
    SOLUTION TROUVE

    En recodant ma fonction comme ceci:

    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
     
        protected List selectObjetsParentsInseres(final AbstractEntite<Long>[] abstractEntites) {
        	//on récupère seulement les objets qu'on vient d'insérer
     
    	//initialisation des variables pour la requête préparée
        	String tailleMax= new Integer(abstractEntites.length).toString();
        	Long identifiantDepot=((AbstractBETraceObjet) abstractEntites[0]).getTraceDepot().getIdentifiant();
     
    	//exécution de la requête préparée avec ses arguments et récupération du résultat de l'exécution dans une liste.	
            final List objetDepotIds = jdbcTemplate.queryForList("select SY_TRACE_OBJ from "
                    + "(select SY_TRACE_OBJ from TRACE_OBJET where SY_TRACE_DPOT=? order by SY_TRACE_OBJ desc)"
                    + " where ROWNUM <= ? order by SY_TRACE_OBJ asc", new Object[] {identifiantDepot, tailleMax }); 
     
            return objetDepotIds;
        }
    Je n'ai plus de problème. La source de l'anomalie viendrait de l'argument pour ROWNUM=?. Quand je choisis un entier comme "abstractEntites.length", ça provoque le problème; en revanche quand je choisis "new Integer(abstractEntites.length).toString()", je n'ai plus ce problème. Quelqu'un a t'il une explication à cet étrange phénomène?

Discussions similaires

  1. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  2. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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