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 :

Problème d'insertion dans la base de données


Sujet :

JDBC Java

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 113
    Points
    113
    Par défaut Problème d'insertion dans la base de données
    bonjour j'ai créer une classe BD pour la connexion les insertion dans une BD
    voici la classe

    Code java : 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
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package packageBD;
    
    import java.sql.*;
    
    /**
     *
     * @author stagiaire
     */
    public class BD {
    
        private String bdname;
        private String usr;
        private String pwd;
        private Connection cnx = null;
    
        public BD()
        {
            
        }
        public BD(String bdname, String usr, String pwd) {
            this.usr = usr;
            this.pwd = pwd;
            this.bdname = "jdbc:mysql://localhost/" + bdname;
        }
    
        public StringBuilder seConnecter(String bdname, String usr, String pwd) {
    
            StringBuilder msg = new StringBuilder("");
            try {
                Class.forName("org.gjt.mm.mysql.Driver"); // org.gjt.mm.mysql.Driver
                //Class.forName("com.mysql.jdbc.Driver");
                this.cnx = DriverManager.getConnection("jdbc:mysql://localhost/" + bdname, usr, pwd);
                cnx.setAutoCommit(false);
                msg.append("OK");
            } catch (ClassNotFoundException err) {
                msg.append(err.getMessage());
            } catch (SQLException err) {
                msg.append(err.getMessage());
            }
            return msg;
        }
    
        public boolean seDeconnecter() {
            this.cnx = null;
            return true;
        }
    
        public Connection getConnexion()
        {
            return this.cnx;
        }
    
        // ------------------------
        public ResultSet getCurseur(String asSelect)
        // ------------------------
        {
                // --- Pour créer des curseurs En avant et RO
                Statement  lstSql = null;
                ResultSet  lrs    = null;
    
                try
                {
                    lstSql = this.cnx.createStatement();
                    lrs    = lstSql.executeQuery(asSelect);
                }
                catch(SQLException err)
                {
                    lrs = null;
                }
                return lrs;
            }
    
    
            // ------------------------------- 
            public StringBuilder getCurseurCSV(String asSelect)
            // ------------------------------- 
            { 
                StringBuilder lsbResultat = new StringBuilder("");
                ResultSet lrs = null;
                ResultSetMetaData lrsmd; 
            // --- Objet structure de curseur 
            // --- Récupération du contenu du curseur
                lrs = this.getCurseur(asSelect);
            try { 
                // --- La structure du curseur 
                lrsmd = lrs.getMetaData(); 
                // --- Les en-têtes 
                for(int i=1; i<=lrsmd.getColumnCount(); i++)
                { 
                    lsbResultat.append(lrsmd.getColumnName(i) + ";"); 
                } 
                lsbResultat.deleteCharAt(lsbResultat.length()-1);
                lsbResultat.append("\r\n");
                while(lrs.next()) 
                { 
                    for(int i=1; i<=lrsmd.getColumnCount(); i++) 
                    { 
                        lsbResultat.append(lrs.getString(i) + ";");
                    } 
                    lsbResultat.deleteCharAt(lsbResultat.length()-1);
                    lsbResultat.append("\r\n");
                } 
            } 
            catch(SQLException err) { 
                lsbResultat.append(err.getMessage());
            } 
    
            return lsbResultat; 
        }
            
            
            
            //  fonction insertion 
            
            public  int  inserer(String aTable,String aColonnes, String  avaleur) throws SQLException
            {
              //    StringBuilder msg = new StringBuilder("");
                Statement  lstSql = null;
                int  lrs    ;
                
             
                  lstSql =this.cnx.createStatement();
                 //  String requete ="insert into "+aTable+"("+aColonnes+") values("+avaleur+")" ;
                   
                    lrs  = lstSql.executeUpdate("INSERT INTO "+aTable+"("+aColonnes+")values("+avaleur+")");
                    
                  //   System.out.println(lrs);
                  //     msg.append(lrs);
                
                
               
          return lrs;
                
            }
            
            public  int supprimer(String aTable,String aColonnes, String avaleur)
            {
            return 0;
            }
            
            
         
    }


    j'ai creer une autre classe Test qui contient ma fonction Main qui permet de faire des insertion

    voici le code

    Code java : 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
     
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package packageBD;
     
    import java.sql.ResultSet;
    import java.sql.SQLException;
     
    /**
     *
     * @author stagiaire
     */
    public class Test_1 {
     
    public static void main(String[] args) throws SQLException
    {
        BD bd = new BD();
        StringBuilder lsbConnect = bd.seConnecter("test", "root", "");
         System.out.println(lsbConnect);
        /*
        StringBuilder lsbCSV = bd.getCurseurCSV2("SELECT * FROM clients");
        System.out.println(lsbCSV);
         */
     
            String  colonne ="id,contry";
     
            String  champ = "251,MAURITANIE";
     
           int  lsMessage = bd.inserer("countries",colonne,champ);
     
         System.out.println(lsMessage);
     
        bd.seDeconnecter();
    }
    }

    voici ma trace d'erreur et j arrive a comprendre l'erreur

    Code java : 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
     
    run:
    OK
    Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'MAURITANIE' in 'field list'
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    	at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    	at com.mysql.jdbc.Util.getInstance(Util.java:384)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
    	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3562)
    	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3494)
    	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1960)
    	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2114)
    	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2690)
    	at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1648)
    	at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1567)
    	at packageBD.BD.inserer(BD.java:129)
    	at packageBD.Test_1.main(Test_1.java:31)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 1 second)

    merci d'avance de votre aide

  2. #2
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Salut,

    Pour commencer il est plus que conseillé d'utiliser un preparedStatement pour exécuter une requête sql (FAQ).

    Ensuite tu as l'exception MySQLSyntaxErrorException qui indique que ta requête est mal construite.

    Tu peux commencer par l'afficher pour voir ce qui ne va pas. Ensuite en utilisant le preparedStatement, tu devrais justement éviter ce genre d'erreur.

    Cdt.

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Points : 1 825
    Points
    1 825
    Par défaut
    Dans le code, il y a

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cnx.setAutoCommit(false);
    mais jamais un:

    et en cas d'erreur, un


  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 113
    Points
    113
    Par défaut
    merci de votre aide , mon probleme ce trouve au niveau de la
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String  colonne ="id,contry";
     
     String  champ = "251,MAURITANIE";

    si je fais ceci l insertion passe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    String  colonne ="id";
     
            String  champ = "255";
    donc cela veut dire qu il reconnait pas la deuxième ligne

    merci d'avance

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Ton paramètre MAURITANIE doit etre entre guillemets 'MAURITANIE', car c'est une chaine de caractères.
    Mais utilise les prepareStatement, comme indiqué, c'est un bon principe.
    Et si tu fais des transactions, commit ou rollback comme indiqué également.
    Et la méthode close(), pour les connexions, les statements, les resultsets, il faut l'utiliser pour libérer les ressources.

  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
    Salut,

    comme te le disais @Nico2, tu utiliserais des preparedStatement au lieu de truc comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lstSql.executeUpdate("INSERT INTO "+aTable+"("+aColonnes+")values("+avaleur+")"
    tu n'auras pas à te préoccuper de problématiques techniques de syntaxe comme celle que tu as avec

    MAURITANIE

    que ton SGBD essaye d'interpréter comme un nom de colonne, qui n'existe pas et donc ça plante,

    parce que la valeur pour ta colonne c'est

    'MAURITANIE' , entre quotes

    Avec un preparedStatement, ces quotes auraient été ajoutées automatiquement : bien sûr l'appel serait un peu moins simple que de simplement concaténer (il faudrait passer par exemple un tableau), mais rien de très complexe non plus.

    (ce n'est pas le seul avantage des preparedStatement).

    @plawyx par ailleurs remarque justement que sans commit tes updates ne seront jamais effectués réellement dans ta base. mais ce n'est effectivement sans relation avec l'erreur que tu obtiens...
    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 régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 113
    Points
    113
    Par défaut
    merci de vos remarque, comment je vais y procéder avec preparedStatement a partir de ma classe BD

    merci d'avance

  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
    Citation Envoyé par diengkals Voir le message
    merci de vos remarque, comment je vais y procéder avec preparedStatement a partir de ma classe BD

    merci d'avance
    Citation Envoyé par Nico02 Voir le message
    ....il est plus que conseillé d'utiliser un preparedStatement pour exécuter une requête sql (FAQ). .
    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 régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 113
    Points
    113
    Par défaut
    voici j'ai changer ma methode inserer

    Code java : 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
     
    public  void inserer(String aTable,String aColonnes, String  avaleur) throws SQLException
            {
              //    StringBuilder msg = new StringBuilder("");
                Statement  lstSql = null;
              //  int  lrs    ;
     
     
                  lstSql =this.cnx.createStatement();
                 String requete ="insert into ?(?) values(?)" ;
                 PreparedStatement preparedStatement = this.cnx.prepareStatement(requete);
     
                 preparedStatement.setObject(1,aTable, Types.VARCHAR);
                  preparedStatement.setObject(2,aColonnes,Types.VARCHAR);
                  preparedStatement.setObject(3,avaleur,Types.VARCHAR);
     
     
                 //   lrs  = lstSql.executeUpdate("INSERT INTO "+aTable+"("+aColonnes+")values("+avaleur+")");
     
     
                  //   System.out.println(lrs);
                  //     msg.append(lrs);
     
                preparedStatement.executeUpdate();
     
         // return lrs;
     
            }

    au niveau de la methode main

    Code java : 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
     
     
     
    public static void main(String[] args) throws SQLException
    {
        BD bd = new BD();
        StringBuilder lsbConnect = bd.seConnecter("test", "root", "");
         System.out.println(lsbConnect);
        /*
        StringBuilder lsbCSV = bd.getCurseurCSV2("SELECT * FROM clients");
        System.out.println(lsbCSV);
         */
     
            String  colonne ="id,contry";
     
            String  champ = "251,MAURITANIE";
     
            bd.inserer("countries",colonne,champ);
     
         //System.out.println(lsMessage);
     
        bd.seDeconnecter();
    }

    j'ai l'erreur suivant

    Code java : 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
     
    run:
    OK
    Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''countries'('id,contry') values('251,MAURITANIE')' at line 1
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    	at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    	at com.mysql.jdbc.Util.getInstance(Util.java:384)
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
    	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3562)
    	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3494)
    	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1960)
    	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2114)
    	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2696)
    	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2105)
    	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2398)
    	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2316)
    	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2301)
    	at packageBD.BD.inserer(BD.java:141)
    	at packageBD.Test_1.main(Test_1.java:31)
    Java Result: 1
    BUILD SUCCESSFUL (total time: 0 seconds)

    j'ai toujours un probleme de synthexe

    merci d'avance

  10. #10
    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
    Les ? dans la chaîne utilisée pour générer le preparedstatement sont des valeurs et il en faut un par valeur :

    Tu dois donc préparer ta chaîne pour créer ton preparedstatement en fonction :

    - pour la partie insert into , nom de table, listes de colonnes, tu peux faire de la concaténation, en utilisant un StringBuilder
    - pour la partie valeurs, il va falloir que tu passes un tableau de valeurs, ce qui te permettra de connaitre le nombre de ? à concaténer (et le nombre de virgules séparatrices accessoirement), et à appeler autant de setObject(index, valeur)

    Ca si tu veux rester sur l'idée d'un générateur de query. L'autre solution est de créer d'utiliser des constantes String qui représentent tes requêtes. Mais le générique pourquoi pas, ça permet facilement de faire évoluer le modèle : d'ailleurs pour les noms des colonnes et de table j'utiliserais des constantes et je générerais le preparedstatement en constante (à moins d'être multithreadé, ou il faudrait plutôt un pool), une fois pour toute, et non pas à chaque appel).
    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.

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 113
    Points
    113
    Par défaut
    merci de votre aide,

    @joel.drigo
    pourriez vous me donner une synthaxe d'utilisation StringBuilder
    dont vous parler ici
    pour la partie insert into , nom de table, listes de colonnes, tu peux faire de la concaténation, en utilisant un StringBuilder
    - pour la partie valeurs, il va falloir que tu passes un tableau de valeurs, ce qui te permettra de connaitre le nombre de ? à concaténer (et le nombre de virgules séparatrices accessoirement), et à appeler autant de setObject(index, valeur)
    merci d'avance

  12. #12
    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
    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
     
    /**
     * Créer un ordre SQL d'ajout à utiliser avec un PreparedStatement, sous
    * la forme  INSERT INTO tableName ( colNames[0], colNames[1], colNames[2],...)
    VALUES (?,?,?,...);
    */
    public static String  createInsertQuery(String tableName,String[] colNames) {
      StringBuilder query= new StringBuilder();
     
      query.append("INSERT INTO ");            
      query.append(tableName);            
     
      query.append('(');
      for(int i=0; i<colNames.length; i++) {
          if ( i>0 ) query.append(',');
         query.append(colNames[i]);
      }
      query.append(')');
     
      query.append(" VALUES ");            
     
      query.append('(');
      for(int i=0; i<colNames.length; i++) {
          if ( i>0 ) query.append(',');
         query.append('?');
      }
      query.append(')');
     
      return query.toString();
     
    }
    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.

  13. #13
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 113
    Points
    113
    Par défaut
    merci de votre aide ,
    et pour la colonne valeur ne doit etre déclare comme un champ de la fonction insert, sinon si je veux appeller ma fonction insert dans Main comment je vais remplir les valeurs
    par exemple j ai cette declaration
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
      String [] colonne ={"id","contry"};
     
            String  champ = "251,'MAURITANIE' ";
     
            bd.inserer("countries",colonne);

    merci d'avance

  14. #14
    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 diengkals Voir le message
    merci de votre aide ,
    et pour la colonne valeur ne doit etre déclare comme un champ de la fonction insert, sinon si je veux appeller ma fonction insert dans Main comment je vais remplir les valeurs
    par exemple j ai cette declaration
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
      String [] colonne ={"id","contry"};
     
            String  champ = "251,'MAURITANIE' ";
     
            bd.inserer("countries",colonne);

    merci d'avance
    La méthode que je t'ai donné ne fait que créer la chaîne à passer au PreparedStatement.

    Voici ta méthode d'insertion modifiée :

    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
    public  void inserer(String tableName,String[] colNames, Object[]  values) throws SQLException
            {
               if( colNames.length!=values.length ) throw new IllegalArrgumentException(); // on vérifie que le nombre de valeurs est identique au nombre de colonnes (ici succinct, pour l'exemple)
      PreparedStatement preparedStatement = this.cnx.prepareStatement(createInsertQuery(tableName,colNames));
     
    for(int i=0; i<values.length; i++ ) {
    if (values[i] != null )
                 preparedStatement.setObject(i+1,values[i]);
    else 
        preparedStatement.setNull(i+1, java.sql.Types.NULL); 
    }
     
                preparedStatement.executeUpdate();
     
                // peut être ajouter le commit ici si tu fonctionne en autocommit = false
     
            }
    Pour l'appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String [] colonnes ={"id","contry"}; // euh c'est pas country ici des fois ???
     
            Object[] values = new Object[]{251,"MAURITANIE"};
     
            bd.inserer("countries",colonnes,values);
    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.

  15. #15
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 391
    Points : 113
    Points
    113
    Par défaut
    merci infiniment cela fonctionne

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

Discussions similaires

  1. problême d'insertion dans la base de données
    Par tchimou dans le forum Bases de données
    Réponses: 5
    Dernier message: 21/03/2007, 16h33
  2. Problème d'insertion dans une base de donnèes
    Par atout dans le forum Administration
    Réponses: 14
    Dernier message: 27/12/2006, 07h07
  3. [paradox7] Problème d'insertion dans la base de données
    Par mouna201 dans le forum Bases de données
    Réponses: 4
    Dernier message: 01/02/2006, 09h47
  4. problème d'insertion dans une base de données
    Par belmansour tidjani dans le forum JDBC
    Réponses: 7
    Dernier message: 18/01/2006, 22h13
  5. [Hibernate] problème d'insertion dans la base de données
    Par Willy7901 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 18/08/2005, 13h19

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