Java PreparedStatement offre la possibilité de définir explicitement une valeur Null. Cette possibilité est:
prepStmt.setNull(parameterIndex, Types.VARCHAR);
La sémantique de cet appel est-elle la même que lors de l'utilisation d'un setType spécifique avec un paramètre null?
prepStmt.setString(null);
?
Ce guide dit:
6.1.5 Envoi de JDBC NULL en tant que paramètre IN
La méthode setNull permet à un programmeur d'envoyer une valeur JDBC NULL (un SQL NULL générique) à la base de données en tant que paramètre IN. Notez cependant qu'il faut toujours spécifier le type JDBC du paramètre.
Une valeur NULL JDBC sera également envoyée à la base de données lorsqu'une valeur Java nulle est transmise à une méthode setXXX (si elle utilise des objets Java).) La méthode setObject peut toutefois prendre une valeur null uniquement si le type JDBC est spécifié.
Alors oui, ils sont équivalents.
mais attention à cela ....
Long nullLong = null;
preparedStatement.setLong( nullLong );
-throws null pointeur exception-
parce que le prototype est
setLong( long )
NE PAS
setLong( Long )
Un gentil pour vous attraper hein.
Enfin, j'ai fait un petit test et, pendant que je le programmais, je me suis dit que, sans la méthode setNull (..), il ne serait pas possible de définir des valeurs null pour les primitives Java. Pour les objets dans les deux sens
setNull(..)
et
set<ClassName>(.., null))
se comporter de la même manière.
Vous pouvez également envisager d'utiliser preparedStatement.setObject(index,value,type);