Tom's Guide > Forum > Programmation > Récupération d'une liste de structures Oracle via Java

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

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

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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 :
  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. loop
  8.       FETCH C_LISTE_DTOS bulk collect INTO P_LISTE_DTOS;
  9. exit when C_LISTE_DTOS%notfound;
  10. FOR i IN C_LISTE_DTOS.FIRST..C_LISTE_DTOS.LAST LOOP
  11.       P_LISTE_DTOS(i).membre3 := 'test';
  12. END LOOP; end loop;
  13. CLOSE C_LISTE_DTOS;
  14. ....
  15. 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 :

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.

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

J'ai finalement trouvé la solution à mon problème, j'ai tout écris ici : http://www.developpez.net/forums/s [...] ost1116265

Répondre à magikmarcel
Tom's Guide > Forum > Programmation > Récupération d'une liste de structures Oracle via Java
Aller à :

Il y a 2462 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens