La déclaration estComment gérer les valeurs null (peut-être) dans un PreparedStatement?
SELECT * FROM tableA WHERE x = ?
et le paramètre est inséré par java.sql.PreparedStatement « stmt »
stmt.setString(1, y); // y may be null
Si y
est nulle, l'instruction renvoie aucune ligne dans tous les cas parce que x = null
est toujours false (doit être x IS NULL
). Une solution serait
SELECT * FROM tableA WHERE x = ? OR (x IS NULL AND ? IS NULL)
Mais je dois définir le même paramètre deux fois. Y a-t-il une meilleure solution?
Merci!
Je n'utilise pas d'instructions préparées. J'utilise des chaînes SQL, puis je remplace '= NULL' par' Is Null' dans la chaîne SQL. Fonctionne comme un charme. –
Ce type n'est pas sûr et peut-être vulnérable aux attaques par injection. – aioobe