Есть ли способ избежать метода wasNull ()? - PullRequest
3 голосов
/ 13 июня 2011

У меня есть большой ResultSet (получаемый из JDBC запроса) из нескольких тысяч строк. Используя каждую из этих строк, я должен создать экземпляр Object, установив его поля в соответствии с полями этого набора результатов. Теперь, как мы все знаем, getXXX() методы этого JDBC API возвращают 0, если этот конкретный столбец был null. Поэтому для каждого поля каждой строки мне нужно сделать wasNull() перед тем, как установить значение в моем object, что выглядит довольно уродливо и, возможно, также неэффективно. Итак, есть ли другой способ, которым я могу избежать этого?

Помимо JDBC, если есть какой-то совершенно другой, стандартный, общепринятый способ, я открыт и для этого.

Спасибо!

РЕДАКТИРОВАТЬ 1

patientInput.setRaceCodeId(patients.getShort("race_code_id"));  
if(patients.wasNull())
    patientInput.setRaceCodeId(null);

patients - это ResultSet. patientInput является object. Это код, которого я пытаюсь избежать. Я имею в виду, что каждый раз, когда я делаю getXXX() и setXXX(), я должен снова проверять, что то, что я получил от ResultSet, не было null. Если это так, установите для этого поля объекта значение null, так как getXXX() возвращает 0 в этом случае.

Ответы [ 2 ]

3 голосов
/ 15 июня 2011

Хорошо.Я считаю, что есть два возможных подхода к «наведению порядка» в вашем коде.Однако это может привести к расхождению во мнениях относительно того, что аккуратно!

Решение 1 - заменить getXXX () на getObject () , которое возвращает ноль, например,

Short s = (Short)patients.getObject("race_code_id");
patientInput.setRaceCodeId(s); 

Решение 2 - написать универсальный метод-оболочка , который извлекает значения, допускающие обнуление

protected final <T> T getNullableValue(T returnType, String colName, ResultSet rs) throws SQLException {  
  Object colValue = rs.getObject(colName);  
  return (T) colValue;  
}

final static Integer INT = 0;
final static Short SHORT = 0;
.
.
.
patientInput.setRaceCodeId(getNullableValue(SHORT,"race_code_id",patients));
1 голос
/ 13 июня 2011

Вам не нужно делать это с каждым полем, только с полями, которые являются числовыми и, возможно, логическими, и объявлены как обнуляемые в вашей базе данных.Это происходит не так часто, как вы боитесь.

Если вам совершенно не нравится писать такой код, вы можете попробовать переключиться на библиотеку ORM, например, Hibernate.

...