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

avec Java Discussion :

erreur lorsque je valide des champs dans une base mysql


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2014
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 61
    Par défaut erreur lorsque je valide des champs dans une base mysql
    Bonjour,
    j'ai une Bdd Bibliothèque, et je rentre 4 valeurs : nomLivre, auteur, année livre, prix livre. et un bouton enregistrer pour remplir mes champs dans la base MySql.
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    /*
     * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
     * Click nbfs://nbhost/SystemFileSystem/Templates/GUIForms/JFrame.java to edit this template
     */
    package gestionbibliotheque;
     
    import java.sql.Statement;
    //import java.sql.Connection;
    import java.sql.SQLException;
    //import java.sql.DriverManager;
    import javax.swing.JOptionPane;
     
    public class FenetreAjoutLivre extends javax.swing.JFrame {
     
        Statement stmt;
        Connexion maConnexion = new Connexion();
     
        public FenetreAjoutLivre() {
            initComponents();
        }
     
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
     
            jLabel1 = new javax.swing.JLabel();
            jLabel2 = new javax.swing.JLabel();
            jLabel3 = new javax.swing.JLabel();
            jLabel4 = new javax.swing.JLabel();
            jLabel5 = new javax.swing.JLabel();
            mNomLivre = new javax.swing.JTextField();
            mAuteur = new javax.swing.JTextField();
            mAnnee = new javax.swing.JTextField();
            mPrix = new javax.swing.JTextField();
            mBtnEnregistrer = new javax.swing.JButton();
     
            setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
     
            jLabel1.setFont(new java.awt.Font("Segoe UI", 1, 14)); // NOI18N
            jLabel1.setText("Enregistrement des ouvrages");
     
            jLabel2.setText("Nom du livre");
     
            jLabel3.setText("Auteur");
     
            jLabel4.setText("Année");
     
            jLabel5.setText("Prix");
     
            mBtnEnregistrer.setText("Enregistrer");
            mBtnEnregistrer.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    mBtnEnregistrerActionPerformed(evt);
                }
            });
     
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                            .addGap(77, 77, 77)
                            .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 228, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addGroup(layout.createSequentialGroup()
                                .addContainerGap()
                                .addComponent(mBtnEnregistrer, javax.swing.GroupLayout.PREFERRED_SIZE, 99, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                .addGap(34, 34, 34)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                        .addComponent(jLabel4)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addComponent(mAnnee, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE))
                                    .addGroup(layout.createSequentialGroup()
                                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                            .addComponent(jLabel3)
                                            .addComponent(jLabel2))
                                        .addGap(55, 55, 55)
                                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                            .addComponent(mNomLivre, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE)
                                            .addComponent(mAuteur, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE)))
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(jLabel5)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addComponent(mPrix, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE))))))
                    .addContainerGap(95, Short.MAX_VALUE))
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(19, 19, 19)
                    .addComponent(jLabel1)
                    .addGap(34, 34, 34)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel2)
                        .addComponent(mNomLivre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGap(18, 18, 18)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel3)
                        .addComponent(mAuteur, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGap(20, 20, 20)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel4)
                        .addComponent(mAnnee, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGap(25, 25, 25)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel5)
                        .addComponent(mPrix, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 34, Short.MAX_VALUE)
                    .addComponent(mBtnEnregistrer)
                    .addGap(19, 19, 19))
            );
     
            pack();
        }// </editor-fold>                        
     
        private void mBtnEnregistrerActionPerformed(java.awt.event.ActionEvent evt) {                                                
            String nomLivre = mNomLivre.getText();
            String nomAuteur = mAuteur.getText();
            String numAnnee = mAnnee.getText();
            String numPrix = mPrix.getText();
     
            String requete="INSERT INTO livre (nom_livre,nom_auteur,annee-edition,prix_livre) VALUES ('"+nomLivre+"','"+nomAuteur+"','"+numAnnee+"','"+numPrix+"')";
     
            try {
                stmt = maConnexion.ObtenirConnexion().createStatement();
                stmt.executeQuery(requete);
                JOptionPane.showMessageDialog(null,"requete executé avec succès ");
        }
        catch(SQLException ex){
                System.err.println(ex);
     
        }  
     
     
        }
    lorsque je rentre les différentes valeurs dans les champs et je clique sur le bouton pour enregistrer cela met une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    run:
    Chargement du pilote Reussie
    Chargement Connection Reussie
    java.sql.SQLException: Statement.executeQuery() cannot issue statements that do not produce result sets.

  2. #2
    Membre très actif

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 486
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Pour commencer, il faut décomposer le code selon les rôles.
    Ça évitera d'avoir un code imbitable!

    C'est le principe SOLID (S ici):
    https://fr.wikipedia.org/wiki/SOLID_(informatique)

    Deuxième point général: toujours fermer les "Autoclosable":
    https://docs.oracle.com/javase/8/doc...Closeable.html

    Tout ce qui est proche de la BDD l'est.
    Pour cela, on utilise le try-with-ressource:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    try(MonAutoClosable monAutoClosable = ...){
    //Traitement
    }
    Ainsi, avec cette façon de faire, on fermera automatiquement la ressource car on appellera à la fin la méthode close().

    Troisième point: toujours utiliser des PreparedStatement
    https://docs.oracle.com/javase/8/doc...Statement.html.

    Si par exemple tu as:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String monSQL = "SELECT * FROM Personne WHERE id='"+id+"'";
    Et que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    id="DELETE * FROM PERSONNE";
    Tu fais de l'injection de SQL, et tu peux dire au revoir à ta BDD.

    Sur le fond du problème, il faut utiliser executeUpdate.

    Soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    String requete="INSERT INTO livre (nom_livre,nom_auteur,annee-edition,prix_livre) VALUES(?,?,?,?)";
    try(PreparedStatment ps =  maConnexion.ObtenirConnexion().prepareStatement(requete){
            ps.setString(1,nomLivre);
            ps.setString(2,nomAuteur);
            ps.setString(3,numAnnee);
            ps.setString(4,numPrix);
            ps.executeUpdate();
    }
    Notez que la connexion est aussi AutoClosable:
    https://docs.oracle.com/javase/8/doc...onnection.html
    Cordialement.

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

Discussions similaires

  1. Adresser des champs dans une base de données
    Par JeanNoel53 dans le forum Débuter
    Réponses: 2
    Dernier message: 28/06/2015, 15h23
  2. Problème d'enregistrement des champs dans une base
    Par abdoulfall dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 06/02/2012, 18h15
  3. comment ajouter des champs dans une base en exploitation?
    Par Clotilde dans le forum InterBase
    Réponses: 4
    Dernier message: 04/09/2009, 19h53
  4. Editer des champs dans une base de données
    Par sleh12 dans le forum Débuter
    Réponses: 5
    Dernier message: 22/11/2008, 09h02

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