IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

[DbUtils] Cast Dynamique


Sujet :

JDBC Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut [DbUtils] Cast Dynamique
    Bonjour,

    Dans le cadre de mes études je dois créer un jeu de classes pour communiquer avec une base de donnée et créer un sorte de mapping relationnel.

    J utilise DbUtils et je me suis servis du tutoriel de Christophe Jollivet ( http://christophej.developpez.com/tutoriel/api/dbutils/ )

    Ma question est la suivante, lorsqu on déclare une nouvelle classe qui recevra mes Beans, comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //EleveBean est une classe preexistante
    for (int i = 0; i < lBeans.size(); i++) {
    			EleveBean eleve = (EleveBean) lBeans.get(i);
    			System.out.println("\t"+eleve.getNom()+" -> "+eleve.getAge());
    		}
    Est-il possible de "caster" eleve en n importe quelle class?comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (int i = 0; i < lBeans.size(); i++) {
    	 Class tmpClass = Class.forName(monNomDeClasse);
             Object eleve =  tmpClass.newInstance();
            eleve = lBeans.get(i);
    }
    Je me retrouve toujours a devoir "caster en dur" et je veux pas faire un énorme switch... donc je voulais savoir si il y avait une subtilité que je n aurais pas croisée :p .

    Merci d avance.

    Pierre

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 21
    Points : 24
    Points
    24
    Par défaut
    L'exemple que tu présente n'est pas très fonctionnel.

    Mis à part ce détail, le seul moyen en java pour ne pas avoir à caster explicitement une référence est d'utiliser le généric introduit avec java 5.0.

    Seulement DbUtils n'a pas évolué dans le dépot subversion d'apache depuis 2006 et est écrit pour java 1.3.0. Donc pas de generic et donc pas de cast auto.

    Je suis en train de tenter de modifier le code de DbUtils pour lui faire supporter les généric mais il reste encore pas mal de boulo et je peut y consacrer que très peu de temps

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    A d accord, merci du renseignement, j ai n ai finalement pas utilise dbutils, je suis passé par des méthodes plus rébarbatives avec des BeanUtils...
    Ce qui aurait prit 5 lignes en prend maintenant bien plus mais bon ...

    Une dernière question, vu que tu as l air de bien connaître dbutils, si j avais pu "caster" a la volée mes mes beans, dbutils gere-t-il les objets complexes?
    Par exemple si dans ma base de donnée une table "personne" a une key qui se rapporte a une autre table(donc un autre bean) "classe", cela sera-t-il gérer?
    j en doute mais je pose la question :p

    Merci.

    Pierre

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 21
    Points : 24
    Points
    24
    Par défaut
    Il n'y a aucune gestion des relations donc DbUtils ne peut retourner que des Beans composé de primitive + String + Object.

    Maintenant il est possible de créer son propre Handler. Toutefois si tu cherche un framework gérant la persistance de beans complexe, il préférable de s'orienter vers JPA ou Hibernate.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci, je vais essayer de continuer a faire un handler personnalise.
    je vais quand même refaire mon projet grâce a hibernate car il marchera sûrement mieux qu avec mon handler perso.

    Pierre

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Utilise plusieurs handlers. Pas besoin de se cantonner à un unique handler.

    tu as besoin d'une liste d'élèves ? Utilise un handler d'Eleve, avec un BeanList.

    Tu as besoin d'un seul cours ? Utilise un handler de Cours.

    J'utilise DbUtils depuis deux ans, ai transformé son code pour supporter les génériques et quelques autres modifications, et je n'ai rien à y redire. J'ai même créé mon petit système de persistence par dessus et je suis comblé. C'est bien plus léger qu'Hibernate, et je passe très peu de temps à "configurer" ces persistances. En tous cas, je n'ai pas ce fichu fichier XML à gérer.

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    bah le problème c est pas le handler, quand j ai essaye je faisais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    lBeans =
    	(List) qRunner.query(
    		conn,
    		(String) mapQuery.get("duplike"),
    		new BeanListHandler(Class.forName(maClasse)));
    Ce qui fonctionnait bien mais le problème c est que apres quand je veux setter mes javaBeans ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for (int i = 0; i < lBeans.size(); i++) {
    			EleveBean eleve = (EleveBean) lBeans.get(i);
    		System.out.println("\t"+eleve.getNom()+"->"+eleve.getAge());
    }
    Je ne peux pas "caster" dynamiquement mon javaBean dans mon type className.
    Donc a part faire un gros else if pour définir pour chaque nouvel objet un type de classe différent et je n aime pas trop cette methode.
    Je sais pas si je suis très clair, mais bon finalement j ai refait la meme mais a la main en utilisant les BeanUtils/.setProperty/.getProperty ce qui me permet de gérer dynamiquement les classes et les objets lourds (foreign key ....)

    Pierre.

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Si tu utilises Java 5+, tu peux faire cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    List<EleveBean> lBeans =
    	(List<EleveBean>) qRunner.query(
    		conn,
    		(String) mapQuery.get("duplike"),
    		new BeanListHandler(Class.forName(maClasse)));
    Cela te créera un warning à la compilation, mais il faut être sûr de ton coup.

    Pour caster dynamiquement avec une classe,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Class<T> maClasse = ...;
    T monT = maClasse.cast(monObjet);

Discussions similaires

  1. Cast "dynamique" depuis un fichier xml
    Par Arno83 dans le forum Langage
    Réponses: 2
    Dernier message: 26/02/2008, 18h56
  2. Casting Dynamique et l'inserer dans jComboBox ?
    Par ExSter dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 13/06/2007, 03h26
  3. Polymorphisme et cast dynamique
    Par vcoulon dans le forum C++
    Réponses: 16
    Dernier message: 21/03/2007, 14h03
  4. Cast dynamique d'un objet ?
    Par elitost dans le forum Langage
    Réponses: 2
    Dernier message: 02/05/2006, 10h43
  5. [DP][héritage]sous-casting dynamique
    Par Le prophete dans le forum Général Java
    Réponses: 4
    Dernier message: 20/08/2004, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo