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 strings contenant des virgules pour requete SQL


Sujet :

JDBC Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut problème strings contenant des virgules pour requete SQL
    Bonjour,

    J'essaie de passer des variables d'un fichier jar à un autre pour utiliser ces variables dans des requêtes SQL.
    Le problème que je rencontre est que ces variables sont des strings contenant des virgules, des espaces, des apostrophes ou des arobases. Or ces caractères posent des problèmes lors de la déclaration de la requête. Pour l'instant, j'ai réussi à résoudre le problème des apostrophes en doublant ces dernières mais je ne trouve pas de solution pour les autres caractères. Pensez-vous qu'il soit possible de remplacer ces caractères par leur code ascii ? un truc du genre "9" + chr(int) + "impasse truc" pour "9, impasse truc"... bien sur j'ai essayé mais cela ne fonctionne pas mais je me suis peut-être trompé dans la syntaxe (je ne trouve pas dans le guide, tutos ou bible sql ...)

    Voici le code avec lequel j'apelle le fichier jar :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            if (commande.equals("Enregistrer"))
            {
                RecBdd recBdd = new RecBdd("Mickey", "Minnie", "9, impasse truc", "Hollywood", "mickey@gmail.com", "06xxxxxxxx", "06xxxxxxxx");
                System.out.println("RecBdd effectuée ....");
            }
    Et voici le code contenant les requetes et les paramaètres strings :
    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
        public RecBdd(String RBnom, String RBprenom, String RBadresse, String RBville, String RBmail, String RBtel1, String RBtel2)
        {
     
            // Variables relatives à la connexion à la base de données
            String url = "jdbc:mysql://localhost:3306/bdd_cuisine";
            String utilisateur = "Cuisine_VN";
            String motDePasse = "aileOuCuisse";
            Connection connexion = null;
            //Statement statement = null;
            ResultSet resultat = null;
     
            //chargement du pilote
            try
            {
                Class.forName("com.mysql.jdbc.Driver");
                System.out.println("chargement pilote");
            }
            catch (ClassNotFoundException e)
            {
                System.out.println("erreur ClassNotFoundException e dans RecBdd");
            }
     
            //Connection à la base de données
            try
            {
                System.out.println("connexion BDD");
                connexion = DriverManager.getConnection( url, utilisateur, motDePasse );
                //test des variables
                System.out.println(RBadresse);
            }
            catch (SQLException e)
            {
                System.out.println("SQLException erreur connexion BDD");
            }
     
            //commandes SQL
            try
            {
                //création de l'objet gérant les requêtes
                Statement statement = connexion.createStatement();
     
                // Exécution d'une requête d'écriture
                int statut = statement.executeUpdate("INSERT INTO client(nom, prenom, adresse, ville, mail, tel1, tel2, date_inscription) VALUES (" + RBnom + ", " + RBprenom + ", " + RBadresse + ", " + RBville + ", " + RBmail + ", " + RBtel1 + ", " + RBtel2 + ", NOW())");
                System.out.println("enregistrement effectué ???? statut : " + statut);
            }
            catch (SQLException e)
            {
                System.out.println("SQLException requête dans RecBdd");
                e.printStackTrace();
     
            }
     
            finally
            {
                if ( connexion != null )
                    try 
                    {
                        // Fermeture de la connexion
                        System.out.println("fermeture connexion dans RecBdd !?!");
                        connexion.close();
                    }
                    catch ( SQLException ignore )
                    {
                        // Si une erreur survient lors de la fermeture, il suffit de l'ignorer.
                    }
            } 
    }
    Dans ce code, on peut voir que la fonction accepte plusieurs paramètres strings comme DBnom, DBprenom etc ... et la table "client" crée en SQL contient des champs "nom", "prenom" ..etc

    Et voici les erreurs renvoyées par printStackTrace() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    chargement pilote
    connexion BDD
    9, impasse truc
    SQLException requête dans RecBdd
    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 'truc, Hollywood, mickey@gmail.com, 06xxxxxxxx, 06xxxxxxxx, NOW())' at line 1
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    fermeture connexion dans RecBdd !?!
    RecBdd effectuée ....
    Et on remarque à la ligne 3 que les variables (du moins celle contenant l'adresse) sont bien passées d'un jar à l'autre (grâce à public je présume).
    OS : LinuxMint 20

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour,

    visiblement tu n'as pas compris comment faire des requêtes. En effet les chaines doivent être placé entre simple cote donc tu devrais avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ("INSERT INTO client(nom, prenom, adresse, ville, mail, tel1, tel2, date_inscription) VALUES ('" + RBnom + "', '" + RBprenom + "', ...
    Cependant, je te déconseille d'utiliser des Statement et de partir directement sur des PreparedStatement, car dans le cas contraire tu risques d'être confronté a d'autres problèmes de formatage de données
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Bonjour,

    Il est vrai que j'ai fait quelques oublis de simples quotes pour encadrer les chaînes de caractère.

    Merci beaucoup !!!

    OS : LinuxMint 20

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/02/2010, 22h10
  2. Convertir String en varchar pour requete sql
    Par sinasolo dans le forum JDBC
    Réponses: 4
    Dernier message: 01/12/2009, 15h34
  3. Echapper des caractères avec VBA pour requete SQL
    Par mpereg dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/04/2008, 03h41
  4. Recherche 1 responsable + des contributeurs pour FAQ SQL
    Par trotters213 dans le forum Evolutions du club
    Réponses: 21
    Dernier message: 20/04/2006, 17h10
  5. Aide Pour Requete SQL Simple ... Merci d'avance :)
    Par thefutureisnow dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/12/2005, 11h39

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