Bonjour,
Depuis quelques jours, j'essaie de récupérer le contenu d'une liste de structures via JAVA. Pour infos :
- jdk 1.4.2
- Oracle 10g
- Serveur Tomcat
Pour cela, j'ai tout d'abord créé un type :
puis un type permettant de faire une liste de celui-ci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 CREATE TYPE LIGNE_DIAGNOSTIC AS OBJECT (membre1 VARCHAR2(500), membre2 VARCHAR2(500), membre3 VARCHAR2(500), ...;)
Pour remplir ma liste d'objet, j'utilise la méthode suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CREATE OR REPLACE TYPE LIGNES_DIAGNOSTIC AS TABLE OF LIGNE_DIAGNOSTIC INDEX BY PLS_INTEGER;
Cette procédure me permet de renvoyer un tableau de type 'LIGNES_DIAGNOSTIC' contenant un ensemble d'objets 'LIGNE_DIAGNOSTIC'.
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 PROCEDURE PS_GET_DIAGNOSTIC (... P_LISTE_DTOS OUT LIGNES_DIAGNOSTIC, ...) IS ... C_LISTE_DTOS C_LISTE; ... BEGIN OPEN C_LISTE_DTOS FOR SELECT membre1 as membre1, membre2 as membre2, null as membre3, .... FROM tableMembre; loop FETCH C_LISTE_DTOS bulk collect INTO P_LISTE_DTOS; exit when C_LISTE_DTOS%notfound; FOR i IN C_LISTE_DTOS.FIRST..C_LISTE_DTOS.LAST LOOP P_LISTE_DTOS(i).membre3 := 'test'; END LOOP; end loop; CLOSE C_LISTE_DTOS; .... END PS_GET_DIAGNOSTIC;
Il semble que cette prodstock fonctionne comme il faut, j'ai fait un test avec une écriture dans un fichier, et tout était correct. Le problème se pose au moment de la récupération sous JAVA. Pour cette opération, j'ai écrit la méthode suivante :
Le souci est que lors de cette récupération, les données contenues dans chaque structure sont systématiquement égal à la chaîne : "???". La liste des structures est donc correctement récupérée, mais les variables que celles-ci contiennent sont altérées.
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 public static final String PS_GET_DIAGNOSTIC = "{call PKG_TEST.PS_GET_DIAGNOSTIC(?,?,?,?,?,?,?,?)}"; public List getDtoForDiagnostic(...) throws DataAccessException { List dtos = null; ... Connection conn = HibernateUtil.getConnection(); OracleCallableStatement ocs = null; ... try { ocs = (OracleCallableStatement) ((DelegatingCallableStatement) conn .prepareCall(PS_GET_DIAGNOSTIC)).getDelegate(); .... ocs.registerOutParameter(4, OracleTypes.ARRAY, "LIGNES_DIAGNOSTIC"); ocs.execute(); Object[] values = (Object[]) ocs.getArray(4).getArray(); List resultats = new ArrayList(); for (int i = 0; i < values.length; i++) { List ligne = null; ligne = new ArrayList(); STRUCT res = (STRUCT) values[i]; Object[] objects = res.getAttributes(); ligne.add((String) objects[0]); ligne.add((String) objects[1]); ligne.add((String) objects[2]); ... resultats.add(ligne); } return resultats; }
Je ne comprends pas pourquoi, si quelqu'un a une idée je suis preneur.
Merci d'avance.
Partager