В Java я пытаюсь протестировать на нулевое значение от ResultSet, куда столбец бросается к примитивному международному типу.
int iVal;
ResultSet rs = magicallyAppearingStmt.executeQuery(query);
if (rs.next()) {
if (rs.getObject("ID_PARENT") != null && !rs.wasNull()) {
iVal = rs.getInt("ID_PARENT");
}
}
От фрагмента кода выше, там лучший способ сделать это, и я предполагаю, что второй wasNull () тест избыточен?
Обучите нас и Спасибо
По умолчанию ResultSet.getInt
, когда значение поля равно NULL
, возвращает 0
, что также является значением по умолчанию для вашего объявления iVal
. В этом случае ваш тест будет совершенно излишним.
Если вы действительно хотите сделать что-то другое, если значение поля равно NULL, я предлагаю:
int iVal = 0;
ResultSet rs = magicallyAppearingStmt.executeQuery(query);
if (rs.next()) {
iVal = rs.getInt("ID_PARENT");
if (rs.wasNull()) {
// handle NULL field value
}
}
(Отредактировано в соответствии с комментариями @martin ниже; код OP в написанном виде не скомпилируется, потому что iVal
не инициализирован)
Думаю, это лишнее. rs.getObject ("ID_PARENT")
должен возвращать объект Integer
или null
, если значение столбца на самом деле было NULL
. Таким образом, должно быть возможно даже сделать что-то вроде:
if (rs.next()) {
Integer idParent = (Integer) rs.getObject("ID_PARENT");
if (idParent != null) {
iVal = idParent; // works for Java 1.5+
} else {
// handle this case
}
}
AFAIK вы можете просто использовать
iVal = rs.getInt("ID_PARENT");
if (rs.wasNull()) {
// do somthing interesting to handle this situation
}
даже если это NULL.
Другой хороший способ проверки, если у вас есть контроль над SQL, - это добавить значение по умолчанию в сам запрос для столбца int. Затем просто проверьте это значение.
Например, для базы данных Oracle используйте NVL
SELECT NVL(ID_PARENT, -999) FROM TABLE_NAME;
затем проверьте
if (rs.getInt('ID_PARENT') != -999)
{
}
Конечно, это также предполагает, что в столбце есть значение, которое обычно не встречается.