Update

Résolu
Bonjour,

Svp j'ai une BDD en Access ou j'ai prevu un champ oui/non (boolean) mais je n'arrive pas à faire l'update sur ce champ à prtir de Java.
Je vous demande svp de m'aider

Voici mon code

Boolean kal = null;
connect();
try{
String Kal = codeelecteur.getText().toUpperCase();
Statement st =con.createStatement();
int nb = st.executeUpdate("UPDATE lecteur SET candidat = "+true+" WHERE codelect="+kal+"");
st.close();
con.close();
if(nb==1){
JOptionPane.showMessageDialog(null,"LA MODIFICATION A ETE FAITE AVEC SUCCES!","MISE A JOUR DES DONNEES",JOptionPane.INFORMATION_MESSAGE);}
}
catch(Exception ex) {JOptionPane.showMessageDialog(null,"Echec de modification: "+ex);}

2 réponses

  1. Merci bcp je suis parvenu à la solution grace a votre assistance
    1. Modérateur
      Bonjour,

      D'une part tu mélanges
      Boolean kal
      et
      String Kal
      , ici ta condition sur codelect devrait être
      Kal
      et non
      kal
      .

      De plus pour que ça fonctionne il faudrait mettre des apostrophes autour de ta chaîne de caractères
      Kal
      dans la requête SQL.

      " WHERE codelect='"+Kal+"'"

      Cependant il y a des risques de sécurité important à faire ça, car il est tout à fait possible de mettre des apostrophes dans ta chaîne de caractères, cela transformerait la requête et on pourrait faire un peu n'importe quoi.

      Exemple :
      String Kal = "'; DROP TABLE lecteur; --";

      Avec cette valeur de Kal, la requête devient :

      UPDATE lecteur SET candidat = true WHERE codelect='';
      DROP TABLE lecteur; --'

      Cela effacera donc totalement la table lecteur de ta base de données...

      Pour éviter cela il faut utiliser des PreparedStatement en Java.

      PreparedStatement pstmt = con.prepareStatement(
          "UPDATE lecteur SET candidat = ? WHERE codelect = ?");
      pstmt.setBoolean(1, true);
      pstmt.setString(2, Kal);
      pstmt.executeUpdate();