2009-08-31 22 views
62

Java PreparedStatement proporciona la posibilidad de establecer explícitamente un valor nulo. Esta posibilidad es:PreparedStatement setNull (..)

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

son la semántica de esta convocatoria el mismo que cuando se utiliza un setType con un valor nulo?

prepStmt.setString(null) 

?

Respuesta

53

Este guide dice:

6.1.5 Envío de JDBC NULL como un parámetro IN

El método setNull permite a un programador para enviar un JDBC NULL (un genérico SQL NULL) valor a la base de datos como un IN parámetro. Sin embargo, tenga en cuenta que todavía debe especificar el tipo JDBC del parámetro.

También se enviará un JDBC NULL a la base de datos cuando se pase un valor nulo de Java a un método setXXX (si toma objetos Java como argumentos). El método setObject, sin embargo, puede tomar un valor nulo solo si se especifica el tipo JDBC.

+1

+1: Interesante. Supuse que así es como setXXX funcionaba con nulos, pero nunca lo había probado o leído los documentos para él. – Powerlord

+1

Supongo que no hay algo como myPreparedStatement.setInteger (myIntegerObject) (aunque veo que el nombre exacto del método no existe) en caso de que quiera usar un entero potencialmente nulo. De lo contrario, tendré que usar una instrucción if/else, llamando a .setInt() de una manera y .setNull() a la inversa, lo que parece un poco tedioso. –

+0

@ardave, sí, eso es lo que quiero decir con mi último párrafo – djna

12

Finalmente hice una pequeña prueba y mientras lo estaba programando me vino a la mente que sin el método setNull (..) no habría forma de establecer valores nulos para las primitivas de Java. Para objetos en ambos sentidos

setNull(..) 

y

set<ClassName>(.., null)) 

se comportan de la misma manera.

59

pero cuidado con esto ....

Long nullLong = null; 

preparedStatement.setLong(nullLong); 

-thows puntero nulo excepcionalmente

porque el protype es

setLong(long) 

NO

setLong(Long) 

agradable uno para atraparte eh.

3

También podría considerar el uso de preparedStatement.setObject(index,value,type);

Cuestiones relacionadas