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

2 réponses

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