Bonjour,
J'ai un projet concernant la gestion d'un parc machine à réaliser.
J'ai une classe Machine de définie sous java.
Et mes données sont sous Oracle.
Je voudrais faire une lecture dynamique des données de la base et les affecter dans mes classes "metier".
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| public ArrayList<DisqueDur> getArrayListDisqueDurBDD(String num) throws Exception {
ArrayList<DisqueDur> listDisqueDur=new ArrayList<DisqueDur>();
String rqtPreparedStatement="SELECT NUM, MARQUE, MODELE, NUMSERIE, FREQUENCE, CAPACITE FROM DISQUEDUR INNER JOIN MARQUE ON MARQUE.IDMARQUE=DISQUEDUR.IDMARQUE WHERE NUM = ? ";
String[] wildCard={num};
ResultSet rst= getResultSetBDD(rqtPreparedStatement,wildCard);
Field[] disqueDurfields=DisqueDur.class.getDeclaredFields();
DisqueDur dd;
while (rst.next()){
dd= new DisqueDur();
for(Field f:disqueDurfields){
try {
Object[] args=dd.getClass().getDeclaredField(f.getName()).getClass().cast(rst.getObject(f.getName()))};
//ce qui va correspondre aux parametres xxxx de setAttribut(xxxx)
Utilitaires.lancerMethode(dd,args,new String("set"+Utilitaires.premiereLettreMajuscule(f.getName())));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}//fin for Field f:fields
listDisqueDur.add(dd);
}//fin while
return listDisqueDur;
}//fin getListeDisqueDur |
Tout d'abord je ne sais pas si c'est la meilleure technique.
Et je voudrais passer par un Class.cast car j'ai un attibut DisqueDur.frequence de type Double alors que la valeur du champs "Frequence" du ResultSet et de type bigDecimal.
Et lorsque que j'arrive à la ligne
Object[] args={dd.getClass().getDeclaredField(f.getName()).getClass().cast(rst.getObject(f.getName()))};
j'obtiens l'erreur:
Java.lang.NoSuchMethodException: objetsMetier.DisqueDur.setFrequence(java.math.BigDecimal)
at java.lang.Class.getMethod(Unknown Source)
J'ai déja modifié le type du champ dans la base, mais sans succes.
Je ne comprend pas d'ou vient ce type bigDecimal.
Autre question, avec cette methode je ne récupère que le attributs déclarés dans la classe DisqueDur, mais DisqueDur hérite d'un autre classe.
Comment fait-on pour obtenir les attributs de la classe mère? Est-on obligé de passer la SuperClass?
Merci pour votre aide.
Partager