2009-08-31 17 views
62

Java PreparedStatement bietet die Möglichkeit, explizit einen Nullwert festzulegen. Diese Möglichkeit ist:PreparedStatement setNull (..)

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

Sind die Semantik dieses das gleiche nennen, wie wenn ein setType mit einem Null-Wert mit?

prepStmt.setString(null) 

?

Antwort

53

Diese guide sagt:

6.1.5 Senden JDBC NULL als IN-Parameter

Die setNull Methode ermöglicht es einem Programmierer einen JDBC-NULL (eine generische SQL NULL) Wert auf die Datenbank als IN senden Parameter. Beachten Sie jedoch, dass immer noch der JDBC-Typ des Parameters angegeben werden muss.

Ein JDBC NULL wird auch an die Datenbank gesendet, wenn ein Java-Nullwert an eine setXXX-Methode übergeben wird (wenn Java-Objekte als Argumente verwendet werden). Die Methode setObject kann jedoch nur dann einen Nullwert annehmen, wenn der JDBC-Typ angegeben ist.

+1

+1: Interessant. Ich ging davon aus, dass setXXX mit Nullen funktionierte, aber ich hatte es nie getestet oder die Dokumente dafür gelesen. – Powerlord

+1

Ich nehme nicht an, dass es etwas wie myPreparedStatement.setInteger (myIntegerObject) gibt (obwohl ich sehe, dass der genaue Methodenname nicht existiert), falls ich eine potentiell null ganze Zahl benutzen möchte? Andernfalls muss ich eine if/else-Anweisung verwenden, die .setInt() in einer Richtung und .setNull() in der anderen Weise aufruft, was ein wenig mühsam erscheint. –

+0

@ardave, ja, das ist, was ich mit meinem letzten Absatz – djna

12

Endlich habe ich einen kleinen Test gemacht und während ich ihn programmiert habe, kam ich zu dem Gedanken, dass es ohne die setNull (..) Methode keine Möglichkeit geben würde Null-Werte für die Java Primitive zu setzen. Für Objekte in beiden Richtungen

setNull(..) 

und

set<ClassName>(.., null)) 

die gleiche Art und Weise verhalten.

59

aber achten Sie auf diese out ....

Long nullLong = null; 

preparedStatement.setLong(nullLong); 

-thows Nullzeiger exception-

weil die protype

setLong(long) 

NICHT

setLong(Long) 

schön einer, um dich zu fangen, eh.

3

Sie könnten auch in Betracht ziehen preparedStatement.setObject(index,value,type);