Votre question

Récupération d'une liste de structures Oracle via Java

Tags :
  • Diagnostic
  • Programmation
Dernière réponse : dans Programmation
27 Juin 2006 18:11:18

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 :

  1. PROCEDURE PS_GET_DIAGNOSTIC (... P_LISTE_DTOS OUT LIGNES_DIAGNOSTIC, ...) IS
  2. ...
  3. C_LISTE_DTOS C_LISTE;
  4. ...
  5. BEGIN
  6. OPEN C_LISTE_DTOS FOR SELECT membre1 as membre1, membre2 as membre2,null as membre3, .... FROM tableMembre;
  7.  
  8. loop
  9. FETCH C_LISTE_DTOS bulk collect INTO P_LISTE_DTOS;
  10. exit when C_LISTE_DTOS%notfound;
  11. FOR i IN C_LISTE_DTOS.FIRST..C_LISTE_DTOS.LAST LOOP
  12. P_LISTE_DTOS(i).membre3 := 'test';
  13. END LOOP; end loop;
  14. CLOSE C_LISTE_DTOS;
  15. ....
  16. 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 :

  1. public static final String PS_GET_DIAGNOSTIC = "{call PKG_TEST.PS_GET_DIAGNOSTIC(?,?,?,?,?,?,?,?)}";
  2. public List getDtoForDiagnostic(...) throws DataAccessException {
  3. List dtos = null;
  4. ...
  5. Connection conn = HibernateUtil.getConnection();
  6. OracleCallableStatement ocs = null;
  7. ...
  8. try {
  9. ocs = (OracleCallableStatement)((DelegatingCallableStatement) conn.prepareCall(PS_GET_DIAGNOSTIC)).getDelegate();
  10. ....
  11. ocs.registerOutParameter(4, OracleTypes.ARRAY, "LIGNES_DIAGNOSTIC");
  12. ocs.execute();
  13. Object[] values = (Object[]) ocs.getArray(4).getArray();
  14. List resultats = new ArrayList();
  15. for (int i = 0; i < values.length; i++) {
  16. List ligne = null;
  17. ligne = new ArrayList();
  18. STRUCT res = (STRUCT) values[i];
  19. Object[] objects = res.getAttributes();
  20. ligne.add((String) objects[0]);
  21. ligne.add((String) objects[1]);
  22. ligne.add((String) objects[2]);
  23. ...
  24. resultats.add(ligne);
  25. }
  26. return resultats;
  27. }


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.

Autres pages sur : recuperation liste structures oracle via java

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS