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:
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:
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:
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).