Problème de requête

Résolu
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

2 réponses

  1. Modérateur
    Je pense qu'il faut que tu concatène ta chaine ('Select ... ') avec ta variable pour faire ce que tu veux.
    0
    1. 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
    2. Modérateur
      Ajouter le contenu d'une variable à une chaine, ça s'appelle concaténer.
      0
    3. Modérateur
      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
  2. Modérateur
    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
    1. 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
    2. Modérateur
      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
    3. Niquel ça marche, j'avais pas supprimer le statement et je me suis emmêlé les pinceaux. Merci :)
      0