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

Eclipse Java Discussion :

[WSAD] IndexOutOfBounds et PreparedStatement : Pourquoi ?


Sujet :

Eclipse Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 6
    Points : 5
    Points
    5
    Par défaut [WSAD] IndexOutOfBounds et PreparedStatement : Pourquoi ?
    Bonjour,

    j'utilise le pool de connextion WSAD avec un driver DB2 (jusque là : no problemo)
    Ensuite, je dois aller mettre à jour un enregistrement dans une table comportant 32 champs. Pour ce faire, j'utilise un objet PreparedStatement, issu d'une préparation avec la query d'update : (update table machin set tutu=?, (...) where id=? .) laquelle comprenant 33 points d'interrogation : 32 pour les paramètres valeurs et 1 pour le paramètre clé primaire.
    Bref, lors de la première mise à jour, ca se passe très très bien, lors de la seconde mise à jour, ca se passe également très très bien... lors de la troisième mise à jour (toujours la même) bardaf..c'est l'embardée : j'ai une exception sur la ligne 'preparedStatement.setObject(....)', s'agissant de la ligne de code devant passer le dernier paramètre au PreparedStatement (donc le numéro 33)

    bon, pour résumé :
    - la mise à jour est exécutée trois fois de suite (donc toujours la même)
    - OUI, j'ai bien le bon nombre de paramètre
    - OUI, tout se passe bien lors des deux premiers passages
    - NON, le comportement n'est pas le même en utilisant directement le JDBC DB2 sans passer par le pool de WebSphere... (j'ai un petit JUnit qui test mes accès DB)
    - Le dernier paramètre est de type BigDecimal (au fait, ca fonctionne pour d'autre tables donc c'est pas dû au datatype)
    Mes questions :
    1) Est-ce quelqu'un à déjà eu ce genre de drôleries ?
    2) oui : comment proceder pour la correction ?
    3) je dois vraiment mettre une portion de code ? le voilà :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    protected final void updateInjector (PreparedStatement theStatement, AbstractDataBean theDataBean) {
    	try {
    		theStatement.clearParameters();		
    		theStatement.setObject (1, ((PayementsDataBean)theDataBean).getId_payement(), 3,((PayementsDataBean)theDataBean).getId_payement().scale());
    		theStatement.setObject (2, ((PayementsDataBean)theDataBean).getFk_demandeur(), 3,((PayementsDataBean)theDataBean).getFk_demandeur().scale());
    		theStatement.setObject (3, ((PayementsDataBean)theDataBean).getFk_etat(), 3,((PayementsDataBean)theDataBean).getFk_etat().scale());
    		theStatement.setObject (4, ((PayementsDataBean)theDataBean).getFk_signataire(), 3,((PayementsDataBean)theDataBean).getFk_signataire().scale());
    		theStatement.setObject (5, ((PayementsDataBean)theDataBean).getFk_societe(), 12);
    		theStatement.setObject (6, ((PayementsDataBean)theDataBean).getAffectation(), 12);
    		theStatement.setObject (7, ((PayementsDataBean)theDataBean).getBeneficiaire_nom(), 12);
    		theStatement.setObject (8, ((PayementsDataBean)theDataBean).getBeneficiaire_adresse(), 12);
    		theStatement.setObject (9, ((PayementsDataBean)theDataBean).getBeneficiaire_code_postal(), 12);
    		theStatement.setObject (10, ((PayementsDataBean)theDataBean).getBeneficiaire_localite(), 12);
    		theStatement.setObject (11, ((PayementsDataBean)theDataBean).getBeneficiaire_num_compte(), 12);
    		theStatement.setObject (12, ((PayementsDataBean)theDataBean).getControlee(), 5);
    		theStatement.setObject (13, ((PayementsDataBean)theDataBean).getCommentaire(), 1);
    		theStatement.setObject (14, ((PayementsDataBean)theDataBean).getCommunication_libre(), 12);
    		theStatement.setObject (15, ((PayementsDataBean)theDataBean).getCommunication_structuree(), 12);
    		theStatement.setObject (16, ((PayementsDataBean)theDataBean).getCompte_donneur_ordre(), 12);
    		theStatement.setObject (17, ((PayementsDataBean)theDataBean).getDate_heure_accord_signataire(), 93);
    		theStatement.setObject (18, ((PayementsDataBean)theDataBean).getDate_heure_annulation(), 93);
    		theStatement.setObject (19, ((PayementsDataBean)theDataBean).getDate_heure_creation(), 93);
    		theStatement.setObject (20, ((PayementsDataBean)theDataBean).getDate_heure_ctrl_imputation(), 93);
    		theStatement.setObject (21, ((PayementsDataBean)theDataBean).getDate_heure_ctrl_cell_paie(), 93);
    		theStatement.setObject (22, ((PayementsDataBean)theDataBean).getDate_heure_modification(), 93);
    		theStatement.setObject (23, ((PayementsDataBean)theDataBean).getDate_heure_integration_fic_sys(), 93);
    		theStatement.setObject (24, ((PayementsDataBean)theDataBean).getDate_valeur(), 91);
    		theStatement.setObject (25, ((PayementsDataBean)theDataBean).getDemandeur_officiel(), 12);
    		theStatement.setObject (26, ((PayementsDataBean)theDataBean).getEcheance_souhaitee(), 93);
    		theStatement.setObject (27, ((PayementsDataBean)theDataBean).getNumero_cheque(), 4);
    		theStatement.setObject (28, ((PayementsDataBean)theDataBean).getNumero_payement(), 3,((PayementsDataBean)theDataBean).getNumero_payement().scale());
    		theStatement.setObject (29, ((PayementsDataBean)theDataBean).getMoyen_paiement(), 1);
    		theStatement.setObject (30, ((PayementsDataBean)theDataBean).getMontant_total(), 3,((PayementsDataBean)theDataBean).getMontant_total().scale());
    		theStatement.setObject (31, ((PayementsDataBean)theDataBean).getMontant_total_honnoraire(), 3,((PayementsDataBean)theDataBean).getMontant_total_honnoraire().scale());
    		theStatement.setObject (32, ((PayementsDataBean)theDataBean).getTransmission_cheque(), 1);
    /* c'est ici que ca foire une fois sur trois et qu'il faut redémarer WebSphere pour que ca fonctionne à nouveau*/
    		theStatement.setObject (33, wBDId_payementKey, 3,wBDId_payementKey.scale());		
     
    	} catch (SQLException e) {
    			e.printStackTrace();
    	} catch (IndexOutOfBoundsException e) {
    		System.out.println("Aieueu : " + e.getMessage());
    		e.printStackTrace();
    	}
    ainsi que la query update :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE TXS.PAYEMENTS SET ID_PAYEMENT = ?, FK_DEMANDEUR = ?, FK_ETAT = ?, FK_SIGNATAIRE = ?, FK_SOCIETE = ?, AFFECTATION = ?, BENEFICIAIRE_NOM = ?, BENEFICIAIRE_ADRESSE = ?, BENEFICIAIRE_CODE_POSTAL = ?, BENEFICIAIRE_LOCALITE = ?, BENEFICIAIRE_NUM_COMPTE = ?, CONTROLEE = ?, COMMENTAIRE = ?, COMMUNICATION_LIBRE = ?, COMMUNICATION_STRUCTUREE = ?, COMPTE_DONNEUR_ORDRE = ?, DATE_HEURE_ACCORD_SIGNATAIRE = ?, DATE_HEURE_ANNULATION = ?, DATE_HEURE_CREATION = ?, DATE_HEURE_CTRL_IMPUTATION = ?, DATE_HEURE_CTRL_CELL_PAIE = ?, DATE_HEURE_MODIFICATION = ?, DATE_HEURE_INTEGRATION_FIC_SYS = ?, DATE_VALEUR = ?, DEMANDEUR_OFFICIEL = ?, ECHEANCE_SOUHAITEE = ?, NUMERO_CHEQUE = ?, NUMERO_PAYEMENT = ?, MOYEN_PAIEMENT = ?, MONTANT_TOTAL = ?, MONTANT_TOTAL_HONNORAIRE = ?, TRANSMISSION_CHEQUE = ? WHERE ID_PAYEMENT = ?"

  2. #2
    Futur Membre du Club
    Inscrit en
    Août 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Après renseignement pris, c'est un bug connu de WSAD et de WAS .

    Il existe un correctif pour le WAS :
    le correctif n° PQ69364.
    En effet, ils indiquent que pour les PreparedStatement ayant plus de 32 paramètre, le problème survient lors de la deuxième (ou la troisième apparament) exécution. Merci de vous être creusé la tête !!!

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

Discussions similaires

  1. Que choisir ? C# , VB.NET, C++, Delphi ? pourquoi ?
    Par Louis-Guillaume Morand dans le forum Général Dotnet
    Réponses: 475
    Dernier message: 08/04/2010, 19h27
  2. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 14h43
  3. [WSAD] Composition visuelle d'une applet
    Par schum11 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 09/04/2003, 16h19
  4. Pourquoi ces directives #ifndef ... en haut des .h
    Par Patrick PETIT dans le forum C
    Réponses: 8
    Dernier message: 06/03/2003, 23h53

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