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 = ?"