簡體   English   中英

我如何在JDBC中從resultSet中讀取一個可能為null的double值?

[英]How do I in JDBC read a possibly null double value from resultSet?

我的數據庫中有一個類型為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:錯誤因為Java而不是SQL轉換

s = rs.getString(1); // or getObject()
if(s == null) {
  // do something else
} else {
  double d = Double.parseDouble(s);
  // do something
}

有關哪條路更好的建議,還是有其他優越方式? 請不要說“使用Hibernate”,我只限於這里的JDBC代碼。

選項1最接近:

double d = rs.getDouble(1);
if (rs.wasNull()) {
  // do something
} else {
  // use d
}

它不是很好,但那是JDBC。 如果列為null,則double值被視為“bad”,因此每次讀取數據庫中可為空的基元時都應使用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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM