[hibernate] Problème avec les requetes

Problème avec les requetes [hibernate] - Java - Programmation

Marsh Posté le 18-08-2005 à 17:51:58    

Bonjour,
 
J'aimerais savoir comment exploiter le résultat d'une requête de type SQLQuery lorsque celle ci est le fruit de 2 tables dans ma base de données.
 
Voici un exemple avec une requête donnant 2 colonnes ou je m'y prend sans doute mal :

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.  List ligne = (List)resultat.get(1); //je récupere une ligne -> plantage
  10.  System.out.println((String)ligne.get(0)+"-"+(String)ligne.get(1));
  11.  tx.commit();
  12.  HDM.getSession().close();
  13. }


 
Mon erreur vient sans doute de mes lacunes sur les tableaux en java, je n'arrive pas à trouver le bon type qui me permettrait de convertir une ligne de façon à l'exploiter.
 
Précisions :  
Ici utinom et serlibelle sont de type String tous les 2.
 
Merci de toute aide .

Reply

Marsh Posté le 18-08-2005 à 17:51:58   

Reply

Marsh Posté le 18-08-2005 à 17:56:28    

Qu'appelles-tu plantage ?
 
ClassCastException ?
 
Essaye avec un iterator:
 

Code :
  1. for (Iterator it = resultat.iterate(); it.hasNext();){
  2. System.out.println(it.next());
  3. }


Message édité par bartleby le 18-08-2005 à 18:03:22
Reply

Marsh Posté le 18-08-2005 à 18:01:14    

Alors :
1. j'ai java.lang.ClassCastException en ligne 12
2. ok j'ai testé avec d'autres valeurs ça ne change rien
3. l'instruction en ligne 9 me renvoie 735 donc ma liste contient 735 lignes, de 0 à 734 il doit y avoir du contenu apparemment

Reply

Marsh Posté le 18-08-2005 à 18:04:28    

ok j'essaie avec un iterator

Reply

Marsh Posté le 18-08-2005 à 18:07:08    

A la place de ca:
 
List ligne = (List)resultat.get(1);
 
essaye ca et dis moi ce que ca affiche:
 
System.out.println(resultat.get(1).getClass().getName());
 
Selon la doc ( http://www.hibernate.org/hib_docs/ [...] tml#list() ), une ligne est represente pas des  Object[], pas une deuxieme liste


Message édité par bartleby le 18-08-2005 à 18:09:09
Reply

Marsh Posté le 18-08-2005 à 18:08:16    

J'ai mis pratiquement texto ce que tu m'as filé :
 

Code :
  1. for (Iterator it = resultat.iterator(); it.hasNext();){
  2.         System.out.println(it.next());
  3.     }


 
j'obtient une liste avec qqch comme ca à chaque ligne :
[Ljava.lang.Object;@50ca0c
 
J'essaie de faire les transtypage adhoc ...

Reply

Marsh Posté le 18-08-2005 à 18:10:21    

Maintenant j'essaie avec getclass().getname() :
[Ljava.lang.Object;

Reply

Marsh Posté le 18-08-2005 à 18:12:26    

Ok merci pour l'info (Object[]), je vais essayer.
Merci pour ta réactivité surtout !

Reply

Marsh Posté le 18-08-2005 à 18:13:24    

Reactivie : Bof, c'est midi chez moi :)

Reply

Marsh Posté le 18-08-2005 à 18:21:42    

Tu serais pas aux States ou au canada toi ??? ;)
 
Sinon j'ai bien peur de faire le boulet mais j'ai du mal avec les Object(] apparemment :
 

Code :
  1. Object[] ligne = (Object[]) resultat.get(0);
  2. System.out.println((String)ligne[0]);


 
Ca me donne une indexOutOfBounds, j'ai essayé d'autres façon mais marche pas :( .
Sans que ce soit trop te demander tu le récupère comment l'object[] toi ?

Reply

Marsh Posté le 18-08-2005 à 18:21:42   

Reply

Marsh Posté le 18-08-2005 à 19:09:09    

Bon bah j'y suis toujours pas arrivé, je réessaierai demain, merci pour le coup de main qd même

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed