Problème de requête

Résolu/Fermé
Helene - 20 avril 2016 à 21:32
 Helene - 22 avril 2016 à 17:41
Bonjour à tous,

Je travaille actuellement sur un projet en java et pour ça j'ai créer ma base de données sur phpmyadmin. J'ai connecté ma base à eclipse, mais le problème se pose lorsque je veux ajouter un élément donné en argument de la fonction à mon tableau (qui n'a pour l'instant qu'une colonne) .
J'arrive à ajouter n'importe quelle chaîne de caractère ce qui bloque c'est que ça soit une variable.

String sql = "INSERT INTO javadb (personne) VALUES ('j')";

Lorsque je remplace le 'j' par nom qui est le nom de ma variable ça ne fonctionne pas.
J'ai aussi essayé :
.$nom.
$nom
"nom"
'nom'

Rien n'y fait je ne trouve pas.
De l'aide serait donc de la bienvenue.
Cordialement,

Hélène
A voir également:

2 réponses

NHenry Messages postés 15173 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 21 décembre 2024 350
20 avril 2016 à 22:43
Je pense qu'il faut que tu concatène ta chaine ('Select ... ') avec ta variable pour faire ce que tu veux.
0
Merci pour votre réponse. Le problème c'est que ma variable n'est pas stocké dans le tableau en fait c'est une variable dans java. Enfin je suis pas sûre d'avoir compris ce que vous voulez dire...
0
NHenry Messages postés 15173 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 21 décembre 2024 350
21 avril 2016 à 13:43
Ajouter le contenu d'une variable à une chaine, ça s'appelle concaténer.
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 21/04/2016 à 14:01
Attention : la concaténation permet de faire de l'injection SQL, donc à proscrire !

Exemple :
String nom = "'); DROP javadb; --";

Si je concatène comme ceci :
String sql = "INSERT INTO javadb (personne) VALUES ('"+nom+"')";

Cela donne ceci :
INSERT INTO javadb (personne) VALUES (''); DROP javadb; --')

Et bim ! Ça supprime toute la table !
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
21 avril 2016 à 13:43
Bonjour,

Il te faut un Prepared Statement.
https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

String sql = "INSERT INTO javadb (personne) VALUES (?)";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, nom); // "nom" est une variable de type String
ps.executeUpdate();
0
Bonjour,
Merci pour votre réponse, j'obtiens une erreur par contre :/ :

com.mysql.jdbc.exceptions.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 '?)' at line 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2941)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1623)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1715)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3243)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1343)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1260)
at com.objis.demojdbc.DemoJdbc.sauverEnBase(DemoJdbc.java:34)
at com.objis.demojdbc.DemoJdbc.main(DemoJdbc.java:12)
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
22 avril 2016 à 17:09
Tu as :
at com.mysql.jdbc.Statement.executeUpdate
c'est à dire que tu as directement exécuté la requête avec "?" sans remplacer la valeur.

Si tu avais utilisé le code que j'ai mis, en cas d'erreur tu aurais du avoir :
at java.sql.PreparedStatement.executeUpdate()


De plus ton import doit pas être bon, tu as du importer com.mysql.jdbc.* mais c'est java.sql.* qu'il faut importer !
0
Niquel ça marche, j'avais pas supprimer le statement et je me suis emmêlé les pinceaux. Merci :)
0