2009-08-31 17 views
62

Java PreparedStatement offre la possibilità di impostare in modo esplicito un valore Null. Questa possibilità è:PreparedStatement setNull (..)

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

La semantica di questa chiamata è la stessa di quando si utilizza un setType con valore null?

prepStmt.setString(null) 

?

risposta

53

Questo guide dice:

6.1.5 Invio JDBC NULL come parametro IN

Il metodo SetNull permette ai programmatori di inviare un JDBC NULL (un generico SQL NULL) valore al database come IN parametro. Si noti, tuttavia, che si deve ancora specificare il tipo JDBC del parametro.

Un NULL JDBC verrà inoltre inviato al database quando un valore null Java viene passato a un metodo setXXX (se accetta oggetti Java come argomenti). Il metodo setObject, tuttavia, può assumere un valore null solo se viene specificato il tipo JDBC.

+1

+1: interessante. Ho pensato che questo fosse il modo in cui setXXX funzionava con i null, ma in realtà non l'avevo mai testato o letto i documenti per questo. – Powerlord

+1

Non penso che ci sia qualcosa come myPreparedStatement.setInteger (myIntegerObject) (anche se vedo che il nome esatto del metodo non esiste) nel caso io voglia usare un numero intero potenzialmente nullo? Altrimenti dovrò usare una istruzione if/else, chiamando .setInt() one way e .setNull() dall'altra parte, che sembra un po 'noioso. –

+0

@ardave, sì, questo è quello che intendo con il mio ultimo paragrafo – djna

12

Infine ho fatto un piccolo test e mentre stavo programmando mi è venuto in mente, che senza il metodo setNull (..) non ci sarebbe stato modo di impostare valori nulli per le primitive Java. Per gli oggetti in entrambe le direzioni

setNull(..) 

e

set<ClassName>(.., null)) 

comportarsi allo stesso modo.

59

ma attenzione per questo ....

Long nullLong = null; 

preparedStatement.setLong(nullLong); 

-thows puntatore nullo eccezione-

perché il protype è

setLong(long) 

NON

setLong(Long) 

bello uno per prenderti fuori eh.

3

Si potrebbe anche considerare l'utilizzo di preparedStatement.setObject(index,value,type);

Problemi correlati