Récupérer un float à partir d'un HashMap
startech
Messages postés
12
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour tous,
j'ai développé un code java qui permet de récupérer des valeurs à partir des JTextField et les insérer dans un HashMap les valeurs de ce dernier vont stoker dans une base de données mon problème c'est que je puisse pas récupérer les valeurs de type Float et Int qui sont dans le HashMap
voilà mon code et toujours y a une erreur au niveau de ces deux types
merci pour vos aides
cette est la classe Insert elle marche bien
cette méthode est dans la classe GestionBase et ici le problème
ensuite la méthode qui permet d'insérer dans la base
j'ai développé un code java qui permet de récupérer des valeurs à partir des JTextField et les insérer dans un HashMap les valeurs de ce dernier vont stoker dans une base de données mon problème c'est que je puisse pas récupérer les valeurs de type Float et Int qui sont dans le HashMap
voilà mon code et toujours y a une erreur au niveau de ces deux types
merci pour vos aides
cette est la classe Insert elle marche bien
private HashMap info(){
HashMap tab = new HashMap() ;
Date d1 ;
Date d=Date.valueOf(date_c.getText());
if(date_r.getText().equals("")) d1 = null;
else d1=Date.valueOf(date_r.getText());
int num = Integer.parseInt(numero.getText()) ;
float mon = Float.parseFloat(montant.getText()) ;
int in = Integer.parseInt(inpitation.getText()) ;
tab.put("date1", d) ;
tab.put("date2", d1) ;
tab.put("numero", num) ;
tab.put("libelle", libelle.getText()) ;
tab.put("montant", mon) ;
tab.put("inpitation", in) ;
return tab ;
}
cette méthode est dans la classe GestionBase et ici le problème
protected void insert(String query,HashMap s){
try {
Class.forName(pilote);
Connection connexion =
DriverManager.getConnection("jdbc:mysql://localhost/cema","root","");
PreparedStatement prp = connexion.prepareStatement(query) ;
int z=0;
Iterator i = s.entrySet().iterator() ;
while(i.hasNext()){
Map.Entry entry = (Map.Entry) i.next();
if(entry.getKey().equals("montant"))
prp.setFloat(z,Float.parseFloat((String) entry.getValue())) ;
else{
if((entry.getKey().equals("date1"))||(entry.getKey().equals("date2")))
prp.setDate(z, (Date) entry.getValue()) ;
else{
if(entry.getKey().equals("numero"))
prp.setInt(z, Integer.parseInt((String)entry.getValue())) ;
else{
if(entry.getKey().equals("libelle"))
prp.setString(z, (String) entry.getValue()) ;
else prp.setInt(z, Integer.parseInt((String)entry.getValue())) ;
}
}
}
System.out.println(entry.getValue()) ;
z++;
}
prp.executeUpdate();
}catch (ClassNotFoundException a) {
a.printStackTrace();
} catch (SQLException b) {
b.printStackTrace();
}
}
ensuite la méthode qui permet d'insérer dans la base
private String inse(){
String query = new String("INSERT INTO banque ('date_cheque','date_releve','cheque','libelle','montant','inpitation') VALUES (?,?,?,?,?,?)");
return query;
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == ajout){
g.insert(inse(), info()) ;
}
}
A voir également:
- Map to float java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Google map satellite gratuit - Guide
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
1 réponse
Normalement les Map doivent être typées, tu ne devrais donc pas pouvoir mettre tout et n'importe quoi dans ta Map... même si tu peux être très large dans le choix des types en mettant Object par exemple.
Remarque : les noms de variables ne devraient pas contenir de caractères _
Alors là, je dis STOP !
Déjà tu pourrais utiliser une boucle for each, ce serait beaucoup plus clair que ta boucle while sur tes itérateurs :
Sauf que les maps ne servent pas à être itérées de la sorte, on dirait que tu fais de la manipulation de tableau, alors que ça n'a rien à voir.
Déjà parce que tu ne sais pas dans quel ordre tu vas récupérer les résultats dans ta map, du coup quand la clé sera "montant" tu fais
En plus parce que le temps d'accès aux données des maps est en O(1), donc itérer sur les maps va faire du O(n) totalement inutile...
C'est quand même nettement plus simple comme ça, non ?
Remarque : ça aussi c'est moche :
Si ta fonction ne fait aucun calcul et que son seul rôle est de renvoyer une constante, alors autant déclarer la constante directement !
private HashMap<String,Object> info()
{
HashMap<String,Object> tab = new HashMap<String,Object>();
Date d=Date.valueOf(date_c.getText());
if (date_r.getText().isEmpty())
d1 = null;
else
d1=Date.valueOf(date_r.getText());
int num = Integer.parseInt(numero.getText());
float mon = Float.parseFloat(montant.getText());
int in = Integer.parseInt(inpitation.getText());
tab.put("date1", d) ;
tab.put("date2", d1);
tab.put("numero", num);
tab.put("libelle", libelle.getText());
tab.put("montant", mon);
tab.put("inpitation", in);
return tab;
}
Remarque : les noms de variables ne devraient pas contenir de caractères _
Iterator i = s.entrySet().iterator() ;
while(i.hasNext()){
Map.Entry entry = (Map.Entry) i.next();
if(entry.getKey().equals("montant"))
prp.setFloat(z,Float.parseFloat((String) entry.getValue())) ;
Alors là, je dis STOP !
Déjà tu pourrais utiliser une boucle for each, ce serait beaucoup plus clair que ta boucle while sur tes itérateurs :
for (Map.Entry entry : s.entrySet())
if((entry.getKey().equals("date1"))
Sauf que les maps ne servent pas à être itérées de la sorte, on dirait que tu fais de la manipulation de tableau, alors que ça n'a rien à voir.
Déjà parce que tu ne sais pas dans quel ordre tu vas récupérer les résultats dans ta map, du coup quand la clé sera "montant" tu fais
prp.setFloat(z,sans avoir aucune idée de la valeur de z, or celle-ci doit être absolument 5 sinon tu vas mettre n'importe quoi dans ta requête SQL...
En plus parce que le temps d'accès aux données des maps est en O(1), donc itérer sur les maps va faire du O(n) totalement inutile...
Date date1 = (Date) s.get("date1");
Date date2 = (Date) s.get("date1");
int num = (int) s.get("numero");
String libelle = (String) s.get("libelle");
float montant = (float) s.get("montant");
int impitation = (int) s.get("impitation");
PreparedStatement prp = connexion.prepareStatement(query) ;
prp.setDate(1,date1);
prp.setDate(2,date2);
prp.setInt(3,num);
prp.setString(4,libelle);
prp.setFloat(5,montant);
prp.setInt(6,impitation);
C'est quand même nettement plus simple comme ça, non ?
Remarque : ça aussi c'est moche :
private String inse(){
String query = new String("INSERT INTO banque ('date_cheque','date_releve','cheque','libelle','montant','inpitation') VALUES (?,?,?,?,?,?)");
return query;
}
Si ta fonction ne fait aucun calcul et que son seul rôle est de renvoyer une constante, alors autant déclarer la constante directement !
private static final String INSE = "INSERT INTO banque ('date_cheque', 'date_releve', 'cheque', 'libelle', 'montant', 'inpitation') VALUES (?,?,?,?,?,?)";