2010-01-28 13 views

Respuesta

24

Puede consultar wasNull en su ResultSet para averiguar si el valor era null.

Tenga en cuenta que primero debe llamar a uno de los métodos getter en una columna para intentar leer su valor y luego llamar al método wasNull para ver si el valor leído era SQL NULL.

Si realmente necesita un Double después, puede crearlo desde el double devuelto.

+2

1 apenas más que decir – stacker

14

Una alternativa a la mencionada ResultSet#wasNull() es probar ResultSet#getObject() en null por lo que muy bien puede ponerlo en una sola línea en combinación con el operador ternario:

Double d = resultSet.getObject("column") != null ? resultSet.getDouble("column") : null; 

en lugar de

Double d = resultSet.getDouble("column"); 
if (resultSet.wasNull()) { 
    d = null; 
} 
+0

punto interesante, aunque hay una penalización en el rendimiento aquí para llamar a un captador dos veces en el caso común cuando el valor no es nulo. Tal vez es posible simplemente lanzar el resultado de getObject a un doble? – Yoni

+1

@Yoni: Ciertamente no hay una penalización de rendimiento al invocar un getter simple. Los datos ya están * allí * desde que se ha llamado a 'next()'. – BalusC

+0

sino que también tenga en cuenta lo que la documentación del conjunto de resultados dice: 'Para una máxima portabilidad, como resultado columnas del conjunto dentro de cada fila debe leerse de izquierda a derecha orden, y cada columna debe leerse solamente once.': - @ –

2

Se podía hacer:

doble d = (doble) ResultSet.getObject ("columna");

entonces usted no tiene que preocuparse si era nula.

+3

Tenga cuidado, usted puede terminar con tener un error como "ClassCastException 'java.math.BigDecimal no se puede convertir a java.lang.Double'" – prageeth