문제

내 데이터베이스에 입력 된 열이 있습니다. 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?
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top