Проверка пустое международное значение от Java ResultSet

В 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 () тест избыточен?

Обучите нас и Спасибо

265
задан ian_scho 26 May 2010 в 23:42
поделиться

4 ответа

По умолчанию 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 не инициализирован)

348
ответ дан 23 November 2019 в 02:26
поделиться

Думаю, это лишнее. 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
  }      
}
28
ответ дан 23 November 2019 в 02:26
поделиться

AFAIK вы можете просто использовать

iVal = rs.getInt("ID_PARENT");
if (rs.wasNull()) {
  // do somthing interesting to handle this situation
}

даже если это NULL.

10
ответ дан 23 November 2019 в 02:26
поделиться

Другой хороший способ проверки, если у вас есть контроль над SQL, - это добавить значение по умолчанию в сам запрос для столбца int. Затем просто проверьте это значение.

Например, для базы данных Oracle используйте NVL

SELECT NVL(ID_PARENT, -999) FROM TABLE_NAME;

затем проверьте

if (rs.getInt('ID_PARENT') != -999)
{
}

Конечно, это также предполагает, что в столбце есть значение, которое обычно не встречается.

-6
ответ дан 23 November 2019 в 02:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: