Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1761 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Débutant] Object[] récalcitrant ?

 

Sujet(s) à lire :
    - [hibernate] Problème avec les requetes
 

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Débutant] Object[] récalcitrant ?

n°1179372
molmock
Rythm is love ....
Posté le 19-08-2005 à 10:10:48  profilanswer
 

Bonjour,
 
Suite à mon post relatifs au résultats des requêtes hibernate : http://forum.hardware.fr/hardwaref [...] 5888-1.htm
J'ai pu grace à l'aide de Bartleby mieux cerner mon problème :
 
Comment récupérer des données de type String contenues dans un tableau de type Object[] ?
 
Voici le genre d'essais que j'effectue :

Code :
  1. List resultat = requete.list();  //je récupère un tableau de 2 colonnes
  2.      Object[] ligne = new Object[2];
  3.      ligne = (Object[]) resultat.get(0);
  4.      System.out.println((String)ligne[0]);


Cet essai me donne une OutOfBoundsException.
 
Merci de votre aide.
 
En prime la doc de la Methode Query::list() utilisée en ligne 1 ici.

Code :
  1. list
  2. public List list()
  3.           throws HibernateException
  4.     /*Return the query results as a List. If the query contains multiple results pre row, the results are returned in an instance of Object[].*/
  5.     Returns:
  6.         the result list
  7.     Throws:
  8.         HibernateException


Message édité par molmock le 19-08-2005 à 10:23:59
mood
Publicité
Posté le 19-08-2005 à 10:10:48  profilanswer
 

n°1179398
souk
Tourist
Posté le 19-08-2005 à 10:27:16  profilanswer
 

ben spa compliqué:
 

Code :
  1. ligne = (Object[]) resultat.get(0);


tu récupères un tableau de taille 0 vraissemblablement
 
NB: ton

Code :
  1. new Object[2];


ne sert à rien puisque juste après tu donnes une nouvelle valeur a ligne


Message édité par souk le 19-08-2005 à 10:27:27
n°1179406
molmock
Rythm is love ....
Posté le 19-08-2005 à 10:33:27  profilanswer
 

OK je teste

n°1179411
molmock
Rythm is love ....
Posté le 19-08-2005 à 10:36:45  profilanswer
 

Ca me donne ClassCastException, en ligne 2:

Code :
  1. List resultat=requete.list();
  2. Object[] ligne =(Object[]) resultat.get(0);
  3. System.out.println(ligne.length);


Message édité par molmock le 19-08-2005 à 10:37:50
n°1179450
souk
Tourist
Posté le 19-08-2005 à 11:21:28  profilanswer
 

ben tu n'obtiens pas de Object[] [:spamafote]
 
ca te donne quoi ca:

Code :
  1. System.out.println(resultat.get(0).getClass());


 
?


Message édité par souk le 19-08-2005 à 11:22:07
n°1179455
molmock
Rythm is love ....
Posté le 19-08-2005 à 11:25:11  profilanswer
 

Ca me donne ça :
class [Ljava.lang.Object;

n°1179463
souk
Tourist
Posté le 19-08-2005 à 11:34:31  profilanswer
 

[:mlc] et tu te prends une ClassCastException ??
c'est plus qu'étrange :/ tu récupères bien un Object[] ... [:ciler]

n°1179466
molmock
Rythm is love ....
Posté le 19-08-2005 à 11:40:57  profilanswer
 

Et de plus dans le debugger je vois bien les bonnes valeurs dans le tableau Résultat !!!????
 
Je recherche des exemples ou quelqu'un aurait réussit à récupérer des données d'hibernate sans que ça corresponde à des objets métiers, mais j'en trouve pas :cry:

n°1179469
souk
Tourist
Posté le 19-08-2005 à 11:42:58  profilanswer
 

tu peux donner plus de code ? quelle requete tu fais, etc etc, qu'on puisse y voir plus clair ? paske bon la, on n'a pas grand chose à se mettre sous la dent :/

n°1179474
molmock
Rythm is love ....
Posté le 19-08-2005 à 11:55:51  profilanswer
 

Regarde sur le post que j'avais fait avant :
http://forum.hardware.fr/hardwaref [...] 5888-1.htm
 
Je remet le code ici avec les modifs :

Code :
  1. public static void main(String[] args) throws HibernateException, TechniqueException {
  2.          IDatabaseManager HDM = HibernateDatabaseManager.getInstance();
  3.          Session session=HDM.getSession();
  4.          Transaction tx = session.beginTransaction();
  5.          SQLQuery requete = session.createSQLQuery("select utinom,serlibelle " +
  6.                                              "from t_utilisateur u, t_service s " );
  7.          System.out.println(requete.list().size());// On vérifie bien que ca a marché
  8.          List resultat = requete.list();        //je récupère un tableau de 2 colonnes
  9.        
  10. // Transtypage incriminé :  
  11.          Object[] ligne =(Object[]) resultat.get(0);
  12.          System.out.println(ligne.length);
  13. //
  14.      
  15.          tx.commit();
  16.          HDM.getSession().close();
  17.      }


Message édité par molmock le 19-08-2005 à 12:00:09
mood
Publicité
Posté le 19-08-2005 à 11:55:51  profilanswer
 

n°1179483
souk
Tourist
Posté le 19-08-2005 à 12:09:04  profilanswer
 

et avec ca tu as quoi ? ClassCastException en ligne 15 ? si non, la ligne 16 t'affiche quoi ?

n°1179555
molmock
Rythm is love ....
Posté le 19-08-2005 à 13:35:59  profilanswer
 

J'essaie d'afficher le nombre d'éléments de la ligne mais comme ça plante avant ...

n°1179557
molmock
Rythm is love ....
Posté le 19-08-2005 à 13:36:17  profilanswer
 

En ligne 16 j'essaie d'afficher le nombre d'éléments de la ligne mais comme ça plante avant ...

n°1179566
souk
Tourist
Posté le 19-08-2005 à 13:39:31  profilanswer
 

ca plante ? quelle Exception ?

n°1179567
souk
Tourist
Posté le 19-08-2005 à 13:39:47  profilanswer
 

une ClassCastException ?

n°1179571
boulax
Inserer phrase hype en anglais
Posté le 19-08-2005 à 13:44:34  profilanswer
 

La ligne 9 affiche quoi ?


---------------
Posté depuis des chiottes, sales. Me gusta.
n°1179574
molmock
Rythm is love ....
Posté le 19-08-2005 à 13:49:06  profilanswer
 

Euh non excuse moi, je me suis embrouillé dans mes sources, j'ai recompilé ce code, la ligne 15 passe, la ligne 16 renvoie 0 (les objets lignes sont vides).

n°1179575
molmock
Rythm is love ....
Posté le 19-08-2005 à 13:49:31  profilanswer
 

la ligne 9 affiche 735

n°1179580
souk
Tourist
Posté le 19-08-2005 à 13:54:42  profilanswer
 

surement con comme idée, mais si tu remplaces ca:

Code :
  1. System.out.println(requete.list().size());
  2. List resultat = requete.list();


 
par ca:

Code :
  1. List resultat = requete.list();
  2. System.out.println(resultat.size());


 
? [:dawa]
 
(au pire ca t'evitera de faire 2 fois la requete [:joce] )

n°1179593
molmock
Rythm is love ....
Posté le 19-08-2005 à 14:04:22  profilanswer
 

Ok lol, c'est toujours ça de gagné.

n°1179602
souk
Tourist
Posté le 19-08-2005 à 14:11:54  profilanswer
 

sinon, je me demande si a cause du lazy loading faut pas explicitement utiliser un iterateur sur la liste de resultats....

n°1179607
molmock
Rythm is love ....
Posté le 19-08-2005 à 14:20:36  profilanswer
 

J'ai essayé avec un itérateur :

Code :
  1. Iterator iter = requete.list().iterator();
  2.     while (iter.hasNext()) {
  3.         Object[] ligne = (Object[]) iter.next();
  4.         System.out.println(ligne.length);
  5.     }


 
Idem, que des lignes vides... :(

n°1179608
boulax
Inserer phrase hype en anglais
Posté le 19-08-2005 à 14:22:32  profilanswer
 

poste le nouveau code avec le resultat des différents affichage en commentaire stp :o


---------------
Posté depuis des chiottes, sales. Me gusta.
n°1179618
souk
Tourist
Posté le 19-08-2005 à 14:31:13  profilanswer
 

et ta requete elle marche bien ?
 
select utinom,serlibelle from t_utilisateur u, t_service s  
 
=> select u.utinom,s.serlibelle from t_utilisateur u, t_service s  
 
sinon ta requete je pense qu'elle va pas te donner de bons resultats de toute facon, faut peut etre songer a faire une jointure, pas uniquement un produit cartésien [:petrus75]

n°1179622
boulax
Inserer phrase hype en anglais
Posté le 19-08-2005 à 14:33:11  profilanswer
 

Bah s'il dit avoir 735 ligne de resultat... [:spamafote]


---------------
Posté depuis des chiottes, sales. Me gusta.
n°1179627
souk
Tourist
Posté le 19-08-2005 à 14:37:15  profilanswer
 

ben ouais mais que des lignes vides [:joce] donc peut etre que ca doit effectivement retourner des lignes vides ^^

n°1179630
molmock
Rythm is love ....
Posté le 19-08-2005 à 14:39:01  profilanswer
 

En fait ce bout de code est un morceau simplifié de la requête originale, le problème est de savoir comment récupérer des données renvoyées par hibernate sous forme de tableau (ici j'ai restreint à 2 colonnes).
 
boulax -> Voici le code :
 

Code :
  1. public static void main(String[] args) throws HibernateException, TechniqueException {
  2.                   IDatabaseManager HDM = HibernateDatabaseManager.getInstance();
  3.                   Session session=HDM.getSession();
  4.                   Transaction tx = session.beginTransaction();
  5.        
  6.                   SQLQuery requete = session.createSQLQuery("select utinom,serlibelle " +
  7.                                                       "from t_utilisateur u, t_service s " );
  8.                  
  9.                   List resultat = requete.list();     
  10.                   System.out.println(resultat.size()); //735
  11.                   Object[] ligne =(Object[]) resultat.get(0);
  12.                   System.out.println(ligne.length);  //0
  13.                
  14.                   tx.commit();
  15.                   HDM.getSession().close();
  16.     }


 
Résultat :

Code :
  1. Hibernate: select utinom,serlibelle from t_utilisateur u, t_service s
  2. 735
  3. 0

n°1179633
molmock
Rythm is love ....
Posté le 19-08-2005 à 14:42:09  profilanswer
 

souk a écrit :

ben ouais mais que des lignes vides [:joce] donc peut etre que ca doit effectivement retourner des lignes vides ^^


 
J'ai vu mes résultats dans le débugger (jusqu'à ce que je fasse une connerie dans Eclipse qui me balance une noClassDefFoundError des que je lance le debug )

n°1179634
boulax
Inserer phrase hype en anglais
Posté le 19-08-2005 à 14:43:23  profilanswer
 

Ouais comme disais souk, y'a pas une erreur avec tes alias de table ?


---------------
Posté depuis des chiottes, sales. Me gusta.
n°1179638
molmock
Rythm is love ....
Posté le 19-08-2005 à 14:49:51  profilanswer
 

Non, y'a pas d'erreur, ce serait pareil si j'essayait avec un "select * from t_utilisateur", je ne pourrait pas récupérer les données sans faire le bon transtypage (cad : (Utilisateur)resultat.get(0)).

n°1179651
molmock
Rythm is love ....
Posté le 19-08-2005 à 15:04:50  profilanswer
 

Merci de votre aide les gars mais moi j'abandonne, j'ai encore d'autres pb à résoudre (et puis on sait jamais un éclair de génie ...)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Débutant] Object[] récalcitrant ?

 

Sujets relatifs
Problème de clic sur un object movieClip[CSS débutant] Comme lier une feuille CSS à un tableau dans page HTML?
[swing][debutant]pb de JPanelDébutant cherche comment faire un site en php
[ActionScript]pb de débutantFlux rss & débutant
Erreur ASP.Net de débutantfaire une faq[debutant]
[débutant] sdl et openglDébutant – télécharger les cours de bourse sur yahoo
Plus de sujets relatifs à : [Débutant] Object[] récalcitrant ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR