webentwicklung-frage-antwort-db.com.de

PreparedStatement setNull (..)

Java PreparedStatement bietet die Möglichkeit, einen Null-Wert explizit festzulegen. Diese Möglichkeit ist:

prepStmt.setNull(parameterIndex, Types.VARCHAR);

Ist die Semantik dieses Aufrufs dieselbe wie bei Verwendung eines bestimmten setType mit einem Null-Parameter?

prepStmt.setString(null);

?

77
paweloque

Diese Anleitung sagt:

6.1.5 JDBC NULL als IN-Parameter senden

Mit der Methode setNull kann ein Programmierer einen JDBC-NULL-Wert (einen generischen SQL-NULL-Wert) als IN-Parameter an die Datenbank senden. Beachten Sie jedoch, dass der JDBC-Typ des Parameters weiterhin angegeben werden muss.

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

Also ja, sie sind gleichwertig.

66
djna

aber achte darauf ....

Long nullLong = null;

preparedStatement.setLong( nullLong );

-wirft eine Nullzeiger-Ausnahme-

weil der prototyp ist

setLong( long )   

NICHT

setLong( Long )

Schön dich zu erwischen.

69
Owen

Schließlich habe ich einen kleinen Test durchgeführt, und während ich ihn programmierte, fiel mir ein, dass es ohne die setNull (..) -Methode keine Möglichkeit gibt, Nullwerte für die Java) - Grundelemente festzulegen. Für Objekte in beide Richtungen

setNull(..)

und

set<ClassName>(.., null)) 

benimm dich genauso.

13
paweloque

Sie können auch die Verwendung von preparedStatement.setObject(index,value,type); in Betracht ziehen.

6
bithom