2012-02-01 151 views
28

Estoy consultando una base de datos y algunos de los resultados que obtengo son nulos. Estoy configurando estos valores a una variable con un tipo de datos de doble. Llamemos a la variable "resultados". Así que traté de configurar una declaración if para ver que es igual a Null, que por supuesto no funcionó. Aquí está el código que tengo para esa sentencia if:¿Cómo comprobar si un doble es nulo?

if (results == null) 
{ 
    results = 0; 
} 

El error que consigo con este código es:

El operador == no está definida para el tipo (s) argumento doble, nula

¿Hay alguna forma mejor de determinar si es nulo?

+1

Necesita recuperar el valor como algo que realmente puede ser 'nulo', como 'Doble'.Los primitivos no pueden ser nulos. –

Respuesta

26

Recomendaría usar un doble, no un doble como su tipo, entonces se compara con el nulo.

+9

Advertencia: simplemente declarar 'results' como' Double' en lugar de 'double' no solucionará el problema. 'Double results = rs.getDouble();' ** nunca ** asignará un 'null' a' results'. –

+0

Creo que esta respuesta es útil para el caso general de mantener un registro de si un valor doble se ha inicializado o no. –

+2

Pero esa no fue la pregunta que se hizo. Y en el escenario sobre el que OP pregunta, esta solución simplemente no funcionará. –

6

Una primitiva doble en Java nunca puede ser nula. Se inicializará a 0.0 si no se le ha dado ningún valor (excepto cuando se declara una variable doble local y no se asigna un valor, pero esto producirá un error en tiempo de compilación).

Más información sobre los valores primitivos predeterminados here.

+2

Solo se inicializarán a 0.0 si son variables de instancia. De lo contrario, no tienen valor, ni siquiera son nulos. –

+0

(o variables de clase) – Thilo

+1

De acuerdo con los documentos, esto solo ocurre con las variables locales, y al hacerlo producirá un error en tiempo de compilación. Si no puede compilar el código, nunca se ejecutará, por lo que un doble nunca puede ser nulo o no tener ningún valor en ejecución. He actualizado mi publicación de todos modos. – onit

4

Decir que algo "es nulo" significa que es una referencia al valor nulo. Los primitivos (int, double, float, etc.) por definición no son tipos de referencia, por lo que no pueden tener valores nulos. Tendrá que averiguar qué hará su contenedor de base de datos en este caso.

-1

Creo que Double.NaN podría ser capaz de cubrir esto. Ese es el único doble valor 'nulo' que contiene.

+0

no, no lo hará. Concepto diferente –

4

¿Cómo obtiene el valor de "resultados"? ¿Lo estás obteniendo a través de ResultSet.getDouble()? En ese caso, puede marcar ResultSet.wasNull().

44

En primer lugar, un Java double no puede ser nulo y no se puede comparar con un Java null. (El tipo double es un primitivo no es de referencia() tipo y tipos primitivos no pueden ser nulos.)

A continuación, si se llama a ResultSet.getDouble(...), que devuelve no es un double un Double, el comportamiento documentado es que un NULL (de la base de datos) se devolverá como cero. (Ver javadoc vinculado arriba.) Eso no es de ayuda si cero es un valor legítimo para esa columna.

Así que sus opciones son:

El método getObject entregará el valor como un Double (suponiendo que el tipo de columna es double), y está documentado para volver null para un NULL. (Para obtener más información, this page documenta las asignaciones predeterminadas de tipos de SQL a tipos Java y, por lo tanto, qué tipo real esperar getObject para entregar.)

Cuestiones relacionadas