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

Java Discussion :

Enregistrer les valeurs d'une JTable dans une base de données


Sujet :

Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Djibouti

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2015
    Messages : 32
    Points : 15
    Points
    15
    Par défaut Enregistrer les valeurs d'une JTable dans une base de données
    Bonjour,

    J'ai une JTable qui contient 3 colonnes et 9 lignes, lorsque j'insère des chiffres dans la quantités, ce dernier se multiplie avec les valeurs de la 1ère colonne et puis j'ai le résultat dans la colonne total.
    Dans ma base de données j'ai 4 colonnes date date not null primary key, description int, qutité et total. Mais malheuresuement lorsuqe j'enregistre j'ai un message d'erreur : Nom : Sans titre4.jpg
Affichages : 742
Taille : 39,2 Ko

    Mon tableau:
    Nom : Sans titre5.jpg
Affichages : 892
Taille : 56,9 Ko

    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
    enregistrer.addActionListener(new ActionListener(){
    	    	 public void actionPerformed(ActionEvent e){
    	    try
    	     {
    	         Class.forName("com.mysql.jdbc.Driver");
    	         System.out.println("com.mysql.jdbc.Driver found");
    	         connexion=DriverManager.getConnection("jdbc:mysql://localhost:3306/khat","root","1234");
    	         System.out.println("Connexion Ok");   
     
    	            PreparedStatement pstmt=connexion.prepareStatement("INSERT INTO ARRIVAGE(Date,Table) VALUES('" + ((JTextField)date.getDateEditor().getUiComponent()).getText() + "',?,?,?)");
     
    	            for (int i = 0; i < model.getRowCount(); i++) {
    	                for (int j = 0; j < model.getColumnCount(); j++) {
    	                    int o = ((Integer) model.getValueAt(i, j));
    	                    System.out.println("object from table is  : " +o);
    	                    pstmt.setInt(j+1, (int)o);
    	                }
    	                 pstmt.executeUpdate();
    	                 pstmt.clearParameters();
    	                 JOptionPane.showMessageDialog(null,"Added");
    	            }
    	     }catch (Exception insertException)
    	    {System.out.println("Error:"+insertException.getMessage());
    	    	 JOptionPane.showMessageDialog(null,insertException);
    	    	 System.out.println("Error:"+insertException.getMessage());
    	            }    
    	        }   
     
    	    });

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 072
    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 072
    Points : 7 974
    Points
    7 974
    Par défaut
    Ce n'as peut être rien avoir, mais si ta date dans la DB est bien du type DATE, alors tu ne peux pas lui passer une chaine de caractère tel que "21/02/1975". Tu dois formatter a l'aide d'une fonction de ton SGBD (tel que TO_DATE, STR_TO_DATE, etc...)
    (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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Djibouti

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2015
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    Si je l ai convertie au format Date, j'ai une autre classe qui s'exécute sans problème

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 072
    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 072
    Points : 7 974
    Points
    7 974
    Par défaut
    En fait dans l'INSERT tu ne definis que 2 colonnes (Date,Table), alors que pour les VALUEs, tu essayes d'en mettre 4 et la je ne suis pas sure que ca fonctionne.
    (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

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Djibouti

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2015
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    J'ai changé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PreparedStatement pstmt=connexion.prepareStatement("INSERT INTO ARRIVAGE(Date,Table) VALUES('" + ((JTextField)date.getDateEditor().getUiComponent()).getText() + "',?)");
    mais malheureusement y'a une erreur: Errorarameter index out of range (2 > number of parameters, which is 1).

    Ma table : Nom : 1.jpg
Affichages : 724
Taille : 23,5 Ko

    Je crois que ma table supporte qu'une seule ligne et pas toute les lignes de mon tableau????

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Recay1 Voir le message
    Je crois que ma table supporte qu'une seule ligne et pas toute les lignes de mon tableau????
    Mais non, c'est parce que la JTable a 3 colonnes (et tu parcours les colonnes du modèle par une boucle) et que ton preparedStatement n'a qu'un seul paramètre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    PreparedStatement pstmt=connexion.prepareStatement("INSERT INTO ARRIVAGE(Date,Table) VALUES('" + ((JTextField)date.getDateEditor().getUiComponent()).getText() + "',?)");
     
    	            for (int i = 0; i < model.getRowCount(); i++) {
    	                for (int j = 0; j < model.getColumnCount(); j++) {
    	                    int o = ((Integer) model.getValueAt(i, j));
    	                    System.out.println("object from table is  : " +o);
    	                    pstmt.setInt(j+1, (int)o); 
    	                }
    	                 pstmt.executeUpdate();
    	                 pstmt.clearParameters();
    	                 JOptionPane.showMessageDialog(null,"Added");
    	            }
    Donc ça plante dans pstmt.setInt(j+1, (int)o);.

    1. Pourquoi mélanger du paramètre et de la concaténation ? Utilise un paramètre aussi pour le paramètre Date, ça t'évitera des complications au sujet de la syntaxe spécifique pour la valeur de date.
    2. La JTable contient 3 colonnes, et la table contient 4 colonnes : pourquoi chercher à en insérer que 2 (date et table) ?
    3. Dans (Date,Table) tu indiques que tu veux insérer dans un champ appelé Date et un champ appelé Table. Or il n'y a aucun champ qui s'appelle Table.
    4. Ensuite, le fait de parcourir les colonnes le modèle de la JTable, et d'affecter un paramètre par pstmt.setInt(j+1, (int)o), va insérer successivement dans un paramètre 1, 2 puis 3, or il n'y a plus qu'un seul paramètre dans le preparedStatement (le ?) : donc ça plante lors de pstmt.setInt(2, (int)o) (ce que le message d'erreur de dit exactement). Au passage, le cast en int est totalement inutile.
    5. N'oublie pas de fermer ton statement également quand tu ne t'en sers plus pour libérer les ressources. (le try que j'ai ajouté dans le code suivant (try-with-resources))




    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
    try(PreparedStatement pstmt=connexion.prepareStatement("INSERT INTO ARRIVAGE(Date, Description, Quantités, Total) VALUES(?,?,?,?)")) {
     
       for (int i = 0; i < model.getRowCount(); i++) {
           for (int j = 0; j < model.getColumnCount(); j++) {
               int o = ((Integer) model.getValueAt(i, j));
    	   System.out.println("object from table is  : " +o);
    	   pstmt.setInt(j+2, o); 
           }
    
           pstmt.setInt(1,date.getDate()) // si date est bien un JCalendar
    	                 
           pstmt.executeUpdate();
           pstmt.clearParameters();
           JOptionPane.showMessageDialog(null,"Added");
     }
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Djibouti

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2015
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    Ah merci Joel.drigo tu viens tout le temps à mon secours merci merci. Mais j'avais déjà trouver la solution. Ma toute dernière question, est ce possible d'avoir une date pour toutes les lignes et non pas une date pour chaque ligne comme dans l'image ci jointe.

    Je veux pas avoir un tableau : Nom : 2.jpg
Affichages : 705
Taille : 22,1 Ko


    Je veux comme celui-ci: Nom : 4.jpg
Affichages : 708
Taille : 17,0 Ko

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Mais ce que tu me montres là, c'est le contenu de la table : ça n'a aucun sens de mettre la date dans un enregistrement et pas dans les autres (ne serait-ce que parce que tu auras besoin à un moment ou un autre de retrouver les enregistrements pour une date particulière). Après, lors de l'affichage de ces données, tu pourras le faire si tu veux.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Djibouti

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2015
    Messages : 32
    Points : 15
    Points
    15
    Par défaut
    Ben je te solliciterai à ce moment là . Merci

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

Discussions similaires

  1. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 18h37
  2. Réponses: 3
    Dernier message: 25/03/2011, 19h29
  3. Insertion d'une JTable dans une JTable
    Par Dark_TeToN dans le forum Composants
    Réponses: 16
    Dernier message: 14/10/2010, 17h18
  4. Inserer une Jtable dans une Jtable
    Par sylv179 dans le forum Composants
    Réponses: 2
    Dernier message: 22/12/2009, 13h30
  5. Réponses: 3
    Dernier message: 13/01/2009, 17h55

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