web-dev-qa-db-fra.com

PreparedStatement setNull (..)

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);

?

77
paweloque

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.

66
djna

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.

69
Owen

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.

13
paweloque

Vous pouvez également envisager d'utiliser preparedStatement.setObject(index,value,type);

6
bithom