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 :

Sauvegarder les données d'un Jtable dans une base MySQl.


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Homme Profil pro
    Economiste
    Inscrit en
    Décembre 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Bénin

    Informations professionnelles :
    Activité : Economiste
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2016
    Messages : 114
    Points : 63
    Points
    63
    Par défaut Sauvegarder les données d'un Jtable dans une base MySQl.
    Bonjour. J'ai un problème de sauvegarde des données d'un Jtable dans une base de données MySQL. L'application permet d'établir un échéancier de paiement d'un emprunt. Dans cet échéancier, j'ai 8 colonnes dont 7 de type Int et1 autre de type String (C'est la colonne de la date) . Le Jtable fonction bien mais je n'arrive à le sauvegarder dans la base de données.
    Le problème est que lorsque je veut enrégistrer les données dans la BDD je recoir une erreur de type (Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer).
    voici mon code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Connection conn=SingletonConnection.getConnection();
    				try {
    					PreparedStatement ps=conn.prepareStatement
    							("insert into ECHEANCIER values (?,?,?,?,?,?,?,?,?,?,?)");
    					for (int i = 0; i < model.getRowCount(); i++) {
    						for (int j = 0; j < model.getColumnCount(); j++) {
     
    							int o=(Integer) model.getValueAt(i, j);
    							/*c2=(Integer) model.getValueAt(i, 2);
    							c3=(Integer) model.getValueAt(i, 3);
    							c4=(Integer) model.getValueAt(i, 4);
    							c5=(Integer) model.getValueAt(i, 5);
    							c6=(Integer) model.getValueAt(i, 6);
    							c7=(Integer) model.getValueAt(i, 7);*/
    							String Sdate=(String) model.getValueAt(i, 1);
    							DateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
    							Date date = formatter.parse(Sdate);
     
    							java.sql.Date sqlDate = new java.sql.Date(date.getTime());
    							ps.setInt(1, pre);
    							ps.setString(2,txtCodeCli.getText());
    							ps.setString(3, "R"+model.getValueAt(i, 0));
    							ps.setDate(4, sqlDate);
    							ps.setDouble(j+2, o);
    							/*ps.setDouble(5, c2);
    							ps.setDouble(6, c3);
    							ps.setDouble(7, c4);
    							ps.setDouble(8, c5);
    							ps.setDouble(9, c6);
    							ps.setDouble(10, c7);*/
    							ps.setDate(11, sqlDate);
    						}
    					}
    					ps.execute();
    					ps.close();
    				} catch (SQLException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				} catch (ParseException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    Voila l'intégralité du message d'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
    	at MetierPresentation.FrameEcheancier$3.actionPerformed(FrameEcheancier.java:439)
    	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    	at java.awt.Component.processMouseEvent(Unknown Source)
    	at javax.swing.JComponent.processMouseEvent(Unknown Source)
    	at java.awt.Component.processEvent(Unknown Source)
    	at java.awt.Container.processEvent(Unknown Source)
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Window.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    	at java.awt.EventQueue.access$500(Unknown Source)
    	at java.awt.EventQueue$3.run(Unknown Source)
    	at java.awt.EventQueue$3.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    	at java.awt.EventQueue$4.run(Unknown Source)
    	at java.awt.EventQueue$4.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)
    Aidez moi s'il vous plais.

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Elle correspond à quelle ligne la 439 de ta classe FrameEcheancier.java ?

    Au vu de ton code, ton exception peut être donnée dans le cas suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int o=(Integer) model.getValueAt(i, j);
    Je ne sais pas ce qu'est l'objet "model" en lui même mais la récupération d'une valeur est un String là où tu attends un Integer.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  3. #3
    Membre du Club
    Homme Profil pro
    Economiste
    Inscrit en
    Décembre 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Bénin

    Informations professionnelles :
    Activité : Economiste
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2016
    Messages : 114
    Points : 63
    Points
    63
    Par défaut
    Bonjour Robin56. Merci de m'avoi repondu.
    En fait comme je l'ai écrit dans le premier message, il s'agit de récupérer les données d'un Jtable et les enrégistrer dans la base de données. Le model de ce Jtable c'est lui qui est denommé "model". Donc pour récuperer les données du JTable j'ai passé par ce "model". Comme vous me l'avez écris, la colonne qui apparement me pose de problème et celui de la date qui dans le Jtable est de type String. Je ne sais pas comment je vais faire pour avoir tous les colonnes de type int dans un objet et celles de type dans un autre objet pour pouvoir enrégistrer l'ensemble du tableau un seul fois.

  4. #4
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Tu n'as pas répondu à ma question à savoir à quoi correspond la ligne 439 de ta classe FrameEcheancier.java ?
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  5. #5
    Membre du Club
    Homme Profil pro
    Economiste
    Inscrit en
    Décembre 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Bénin

    Informations professionnelles :
    Activité : Economiste
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2016
    Messages : 114
    Points : 63
    Points
    63
    Par défaut
    Au niveau de la 439 j'ai recupérer les informations du Jtable pour les stocker dans l'objet "o" .

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Le problème c'est tu essaies de caster un String en Integer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int o=Integer.valueOf(model.getValueAt(i, j));
    A+.

  7. #7
    Membre du Club
    Homme Profil pro
    Economiste
    Inscrit en
    Décembre 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Bénin

    Informations professionnelles :
    Activité : Economiste
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2016
    Messages : 114
    Points : 63
    Points
    63
    Par défaut
    J'ai essayé de le faire mais ça n'a pas marché. Si vous pouvez me proposé un code cela me fera beaucoup plaisir.

  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    J'ai loupé celle la:
    Citation Envoyé par afkiba Voir le message
    Comme vous me l'avez écris, la colonne qui apparement me pose de problème et celui de la date qui dans le Jtable est de type String. Je ne sais pas comment je vais faire pour avoir tous les colonnes de type int dans un objet et celles de type dans un autre objet pour pouvoir enrégistrer l'ensemble du tableau un seul fois.
    Pourquoi convertir une chaîne de format date en int . Parse la en date et récupère les champs que tu voulais avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
    Date date = sdf.parse("31-12-2017");
    Sinon, en java 1.8:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LocalDate localDate = LocalDate.parse("31-12-2017", DateTimeFormatter.ofPattern("dd-MM-yyyy"));
    A+.

  9. #9
    Membre du Club
    Homme Profil pro
    Economiste
    Inscrit en
    Décembre 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Bénin

    Informations professionnelles :
    Activité : Economiste
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2016
    Messages : 114
    Points : 63
    Points
    63
    Par défaut
    J'ai essai ca n'a pas marché.
    Mais je pense que les codes là me permettrons de convertir les chaines de caractère en date.

  10. #10
    Membre du Club
    Homme Profil pro
    Economiste
    Inscrit en
    Décembre 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Bénin

    Informations professionnelles :
    Activité : Economiste
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2016
    Messages : 114
    Points : 63
    Points
    63
    Par défaut
    Après plusieurs recherches j'ai pus inserer la dernière ligne du Jtable dans BDD par le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Connection conn=SingletonConnection.getConnection();
    				try {
    					PreparedStatement ps=conn.prepareStatement
    							("insert into ECHEANCIER values (?,?,?,?,?,?,?,?,?,?,?)");
    					for (int i = 0; i < model.getRowCount(); i++) {
    						for (int j = 0; j < model.getColumnCount(); j++) {
     
    							//int o=(Integer) model.getValueAt(i, j);
    							c2=(Integer) model.getValueAt(i, 2);
    							c3=(Integer) model.getValueAt(i, 3);
    							c4=(Integer) model.getValueAt(i, 4);
    							c5=(Integer) model.getValueAt(i, 5);
    							c6=(Integer) model.getValueAt(i, 6);
    							c7=(Integer) model.getValueAt(i, 7);
    							String Sdate=(String) model.getValueAt(i, 1);
    							DateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
    							Date date = formatter.parse(Sdate);
     
    							java.sql.Date sqlDate = new java.sql.Date(date.getTime());
    							ps.setInt(1, pre);
    							ps.setString(2,txtCodeCli.getText());
    							ps.setString(3, "R"+model.getValueAt(i, 0));
    							ps.setDate(4, sqlDate);
    							//ps.setDouble(j+2, o);
    							ps.setDouble(5, c2);
    							ps.setDouble(6, c3);
    							ps.setDouble(7, c4);
    							ps.setDouble(8, c5);
    							ps.setDouble(9, c6);
    							ps.setDouble(10, c7);
    							ps.setDate(11, sqlDate);
    						}
    					}
    					ps.execute();
    					ps.close();
    				} catch (SQLException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				} catch (ParseException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    Mais je veux insérer l'ensemble des lignes dans la BDD.
    Quelqu'un pour m'aidez à mieux faire.

  11. #11
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Est mal placé, il devrait être dans la boucle sur les lignes et non en dehors.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Membre du Club
    Homme Profil pro
    Economiste
    Inscrit en
    Décembre 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Bénin

    Informations professionnelles :
    Activité : Economiste
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2016
    Messages : 114
    Points : 63
    Points
    63
    Par défaut
    Vous m'avez sauvez. Ca à marché. Donc il s'agissait de problème de disposition de ps.execute().
    Vraiment infiniment merci.

  13. #13
    Membre du Club
    Homme Profil pro
    Economiste
    Inscrit en
    Décembre 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Bénin

    Informations professionnelles :
    Activité : Economiste
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2016
    Messages : 114
    Points : 63
    Points
    63
    Par défaut
    Voici le code qui à marché.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Connection conn=SingletonConnection.getConnection();
    				try {
    					PreparedStatement ps=conn.prepareStatement
    							("insert into ECHEANCIER values (?,?,?,?,?,?,?,?,?,?,?)");
    					for (int i = 0; i < model.getRowCount(); i++) {
    						for (int j = 0; j < model.getColumnCount(); j++) {
     
    							//int o=(Integer) model.getValueAt(i, j);
    							c2=(Integer) model.getValueAt(i, 2);
    							c3=(Integer) model.getValueAt(i, 3);
    							c4=(Integer) model.getValueAt(i, 4);
    							c5=(Integer) model.getValueAt(i, 5);
    							c6=(Integer) model.getValueAt(i, 6);
    							c7=(Integer) model.getValueAt(i, 7);
    							String Sdate=(String) model.getValueAt(i, 1);
    							DateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
    							Date date = formatter.parse(Sdate);
     
    							java.sql.Date sqlDate = new java.sql.Date(date.getTime());
    							ps.setInt(1, pre);
    							ps.setString(2,txtCodeCli.getText());
    							ps.setString(3, "R"+model.getValueAt(i, 0));
    							ps.setDate(4, sqlDate);
    							//ps.setDouble(j+2, o);
    							ps.setDouble(5, c2);
    							ps.setDouble(6, c3);
    							ps.setDouble(7, c4);
    							ps.setDouble(8, c5);
    							ps.setDouble(9, c6);
    							ps.setDouble(10, c7);
    							ps.setDate(11, sqlDate);
    						}
                                            ps.execute();
    					}
     
    					ps.close();
    				} catch (SQLException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				} catch (ParseException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    Lorsque je l'est (ps.execute() placer à l'intérieur du deuxième boucle, il execute chaque ligne de la table 8 fois. Mais à l'intérieur de la prémière boucle ca marche bien.

  14. #14
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    D'un autre coté la boucle avec le J tu ne t'en sers pas dans ce cas. (bien qu'un morceau de code commenté semble indiqué que tu voulais l'utiliser quand même).
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2020
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour. Avec vos discussions sur la plateforme, j'ai réussi à sauvegarder les données de ma Jtable dans ma BD MySQL.
    Mon souci maintenant est que j'aimerais faire apparaître certaines données (nomProduit, quantité, Prix, total) de ma Jtable sur un ireport que j'ai déjà ..
    J'ai beau éssayer mais je trouve pas de solution.
    Aidez moi SVP.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/02/2015, 17h44
  2. Réponses: 6
    Dernier message: 03/10/2013, 11h43
  3. Réponses: 15
    Dernier message: 19/11/2010, 19h20
  4. Passer les données ISO en UT8 dans une base UT8.
    Par Space Cowboy dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 06/06/2008, 13h15
  5. [MySQL] Envoyer les données d'un CSV dans une BDD Mysql
    Par guyfoot dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/09/2007, 07h13

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