2011-05-04 8 views
32

A ResultSet proporciona un método getInt() que devuelve primitiva int. ¿Es posible obtener el objeto Integer, que permite null? El campo DB que estoy recuperando es anulable y getInt() me devuelve 0 siempre que el campo sea null.Obtención objeto número entero de ResultSet

Gracias

Respuesta

33

Sólo comprobar si el campo es null o no usar ResultSet#getObject().

Integer foo = resultSet.getObject("foo") != null ? resultSet.getInt("foo") : null; 

O, si se puede garantizar que se utiliza la derecha tipo de columna DB para que ResultSet#getObject() realmente devuelve un Integer (y por lo tanto no Long, Short o Byte), entonces también puede simplemente encasillado ella.

Integer foo = (Integer) resultSet.getObject("foo"); 
+0

Debe ser ineficaz tampoco, ya que las referencias a Boolean se almacenan en caché siempre que no se use el constructor (Boolean.TRUE y FALSE). –

+0

Gracias. Desafortunadamente agrega un código repetitivo. Ojalá haya una manera más limpia. –

+3

¿Qué pasa con 'Entero foo = (Entero) rs.getObjeto (" foo ");'? (o use un try-catch para detectar el error de conversión y establézcalo en nulo/informe el error según sea necesario). – ADTC

11

Puede comprobar si hay wasNull después de recuperar el valor.

Desde el documentation:

Se informa sobre si la última lectura columna tenía un valor de SQL NULL.
Tenga en cuenta que primero debe llamar a uno de los métodos getter en una columna para tratar de leer su valor y luego llamar al método wasNull para ver si el valor leído era SQL NULL.

+0

Desafortunadamente no es muy factible en una sola línea de código. – BalusC

7

Hay una manera más simple. Simplemente escriba "cast it". Si es nulo, será nulo. Si es válido, entonces se convierte en el objeto autoboxado.

(Integer) resultSet.getObject("foo")