Valores nulos en paso de parametros en setInt y setDouble

prado
09 de Febrero del 2006
Hola,
Tengo que pasar un dato tipo int y tipo double a un procedimiento
almacenado en una base de datos. La forma de hacerlo es la siguiente.


Integer intCodigo = null;
Double dblCantidad = null;

if (request.getParameter("id").trim() != "") {
intCodigo = new Integer(request.getParameter("id").trim() ); }

if (request.getParameter("cantidad").trim() != "") {
dblCantidad = new Double(request.getParameter("cantidad").trim() ); }

CallableStatement cs = conn.prepareCall("{ call proInserta(?,?,?) }");

cs.setInt ( 1, intCodigo );
cs.setDouble ( 2, dblCantidad );

cs.execute();
cs.close();


Mi problema es que en algunos casos tengo que pasar al procedimiento
valores null para estas variables int y double. Como estas variables a
ser tipo primitivos no admiten valores null he puesto varible tipo
Integer y Double que si admiten valores null.


Lo que pasa que estas variables tipo Integer y Double no se pueden
poner como parámetro a setInt ni a setDouble, por lo que tendría que
convertirlos a int y a double, pero estos tipos (int y double) no
admiten valores nulos y yo necesito pasar al procedimiento valores
nulos.


Hay alguna solución a esto?


Gracias de antemano.

jaquiso
09 de Febrero del 2006
Si, es muy facil.
Tan solo tienes que usar el metodo setNull(int, int) de la interfaz PreparedStatement (CallableStatement tambien lo tiene ya que extiende de PreparedStatement), de la siguiente manera:
if (intCodigo != null)
{
cs.setInt(1, intCodigo.intValue());
}
else
{
cs.setNull(1, Types.INTEGER);
}

y con el Double más o menos lo mismo. La clase Types pertenece al paquete java.sql.

Un saludo.