Problème de requête

Résolu
Helene -  
 Helene -
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 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
Je pense qu'il faut que tu concatène ta chaine ('Select ... ') avec ta variable pour faire ce que tu veux.
0
Solène
 
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 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
Ajouter le contenu d'une variable à une chaine, ça s'appelle concaténer.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
Helene
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
Helene
 
Niquel ça marche, j'avais pas supprimer le statement et je me suis emmêlé les pinceaux. Merci :)
0