JDBC에서 resultSet에서 Null Double 값을 읽는 방법은 무엇입니까?
문제
내 데이터베이스에 입력 된 열이 있습니다. double
JDBC ResultSet을 사용하여 값을 읽고 싶지만 NULL 일 수 있습니다. 이것을하는 가장 좋은 방법은 무엇입니까? 나는 세 가지 옵션을 생각할 수 있습니다.
옵션 1 : 예외는 장황하고 냄새가 나기 때문에 나쁘다
double d;
try {
d = rs.getDouble(1);
// do something
} catch(SQLException ex) {
if(rs.wasNull()) {
// do something else
} else {
throw ex;
}
}
옵션 2 : 두 개의 가져 오기 때문에 나쁘다
s = rs.getString(1); // or getObject()
if(s == null) {
// do something else
} else {
double d = rs.getDouble(1);
// do something
}
옵션 3 : SQL 변환보다는 Java이기 때문에 나쁘다
s = rs.getString(1); // or getObject()
if(s == null) {
// do something else
} else {
double d = Double.parseDouble(s);
// do something
}
어떤 방식 으로든 더 나은 제안이 있습니까, 아니면 또 다른 우수한 방법이 있습니까? 그리고 "최대 절전 모드 사용"이라고 말하지 마십시오. 여기서만 JDBC 코드로 제한됩니다.
해결책
옵션 1은 가장 가까이 있습니다.
double d = rs.getDouble(1);
if (rs.wasNull()) {
// do something
} else {
// use d
}
그리 좋지는 않지만 JDBC입니다. 열이 NULL 인 경우 이중 값은 "나쁜"것으로 간주되므로 사용 확인해야합니다. wasNull()
데이터베이스에서 무효가되는 원시를 읽을 때마다.
다른 팁
JDBC 드라이버 및 데이터베이스에 따라 박스형 유형을 사용할 수 있습니다.
Double doubleValueOrNull = (Double)rs.getObject(1); // or .getObject("columnName")
그럴 것입니다 null
열이 있다면 NULL
.
데이터베이스를 변경하면이 작동이 여전히 작동하는지 확인하십시오.
사용:
rs.getObject(1)==null?null:rs.getBigDecimal(1).doubleValue()
또는 Java 8을 사용하면 다음을 수행 할 수 있습니다.
Double dVal = Optional.ofNullable(resultSet.getBigDecimal("col_name"))
.map(BigDecimal::doubleValue).orElse(null));
Kotlin 버전을 검색 할 수있는 필드를 검색합니다.
val parentId = resultSet.getObject("parent_id") as Double?
제휴하지 않습니다 StackOverflow