Récupération d'une liste de structures oracle via java

Résolu
MagikMarcel Messages postés 2 Date d'inscription jeudi 8 mai 2003 Statut Membre Dernière intervention 29 juin 2006 - 27 juin 2006 à 17:57
MagikMarcel Messages postés 2 Date d'inscription jeudi 8 mai 2003 Statut Membre Dernière intervention 29 juin 2006 - 29 juin 2006 à 16:36
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 :
<!-- BEGIN TEMPLATE: bbcode_code -->

Code :

CREATE TYPE LIGNE_DIAGNOSTIC AS OBJECT
(membre1 VARCHAR2(500),
membre2 VARCHAR2(500),
membre3 VARCHAR2(500),
...;)

<!-- END TEMPLATE: bbcode_code -->

puis un type permettant de faire une liste de celui-ci
<!-- BEGIN TEMPLATE: bbcode_code -->

Code :

CREATE OR REPLACE TYPE LIGNES_DIAGNOSTIC AS TABLE OF LIGNE_DIAGNOSTIC INDEX BY PLS_INTEGER;

<!-- END TEMPLATE: bbcode_code -->

Pour remplir ma liste d'objet, j'utilise la méthode suivante :
<!-- BEGIN TEMPLATE: bbcode_code -->

Code :

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;

<!-- END TEMPLATE: bbcode_code -->

Cette procédure me permet de renvoyer un tableau de type 'LIGNES_DIAGNOSTIC' contenant un ensemble d'objets 'LIGNE_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 :

<!-- BEGIN TEMPLATE: bbcode_code -->

Code :

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;
}

<!-- END TEMPLATE: bbcode_code -->

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.


Je ne comprends pas pourquoi, si quelqu'un a une idée je suis preneur.


Merci d'avance.

1 réponse

MagikMarcel Messages postés 2 Date d'inscription jeudi 8 mai 2003 Statut Membre Dernière intervention 29 juin 2006
29 juin 2006 à 16:36
J'ai finalement trouvé la solution à mon problème, j'ai tout décris ici :
http://www.developpez.net/forums/showthread.php?p=1116265#post1116265
3
Rejoignez-nous