Page d'accueilFindIt !Contact Cahier Java

Cahier Java

 Forum Java

Ce forum est dédié à l'ouvrage Bien programmer en Java 7, ainsi qu'aux éditions précédentes des Cahiers du Programmeur Java.
Utilisez-le pour toute demande d'information supplémentaire ou pour toute suggestion au sujet de ces ouvrages.
Pour les informations relatives au Cahier du programmeur Swing, merci d'utiliser le forum qui lui est dédié.
Vous pouvez consulter ces forums librement. Pour y participer, inscrivez-vous tout d'abord.

Sujets Messages récents Identification Inscription
Messages du sujet Récupération d'une liste de structures Oracle via Java

magikmarcel

Membre depuis : 27 juin 2006
Messages : 2
 27 juin 2006 à 17:49
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 :
Code :

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


puis un type permettant de faire une liste de celui-ci
Code :

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


Pour remplir ma liste d'objet, j'utilise la méthode suivante :
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;

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 :

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


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.

magikmarcel

Membre depuis : 27 juin 2006
Messages : 2
 29 juin 2006 à 16:34
J'ai finalement trouvé la solution à mon problème, j'y ai répondu là : http://www.developpez.net/forums/showthread.php?p=1116265#post1116265


Page d'accueilFindIt !ContactDébut de la page

© Copyrights 1997-2014 eTeks - Tous droits réservés

Cahier Java