2009-08-31 7 views
62

Java PreparedStatement offre la possibilité de définir explicitement une valeur Null. Cette possibilité est:PreparedStatement setNull (..)

prepStmt.setNull(<n>, Types.VARCHAR) 

Est-ce la sémantique de cet appel le même que lors de l'utilisation d'un setType avec une valeur nulle?

prepStmt.setString(null) 

?

Répondre

53

Ce guide dit:

6.1.5 Envoi NULL JDBC comme paramètre IN

La méthode setNull permet à un programmeur d'envoyer un NULL JDBC (générique NULL SQL) valeur à la base de données en tant IN paramètre. Notez, cependant, qu'il faut encore spécifier le type JDBC du paramètre.

Une valeur JDBC NULL sera également envoyée à la base de données lorsqu'une valeur nulle Java est transmise à une méthode setXXX (si elle prend des objets Java en tant qu'arguments). La méthode setObject, cependant, ne peut prendre une valeur nulle que si le type JDBC est spécifié.

+1

+1: Intéressant. J'ai supposé que setXXX fonctionnait avec des valeurs nulles, mais je ne l'avais jamais testé ni lu les documents pour cela. – Powerlord

+1

Je ne pense pas qu'il existe quelque chose comme myPreparedStatement.setInteger (myIntegerObject) (bien que je vois que le nom exact de la méthode n'existe pas) dans le cas où je veux utiliser un entier potentiellement nul? Sinon, je vais devoir utiliser une instruction if/else, en appelant un .setInt() dans un sens et .setNull() dans l'autre sens, ce qui semble un peu fastidieux. –

+0

@ardave, oui c'est ce que je veux dire par mon dernier paragraphe – djna

12

Enfin j'ai fait un petit test et pendant que je le programmais il m'est venu à l'esprit, que sans la méthode setNull (..) il n'y aurait aucun moyen de définir des valeurs nulles pour les primitives Java. Pour les objets dans les deux sens

setNull(..) 

et

set<ClassName>(.., null)) 

se comportent de la même façon.

59

mais attention à cette ....

Long nullLong = null; 

preparedStatement.setLong(nullLong); 

-thows pointeur NULL exception-

parce que le ProType est

setLong(long) 

PAS

setLong(Long) 

belle un pour vous attraper hein.

3

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

Questions connexes