我如何在JDBC中从resultSet中读取一个可能为null的double值?

时间:2009-07-09 12:15:13

标签: java jdbc 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:错误,因为Java而不是SQL转换

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

关于哪种方式更好的建议,还是有其他优越方式?请不要说“使用Hibernate”,我仅限于此处的JDBC代码。

5 个答案:

答案 0 :(得分:50)

选项1最接近:

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

这不是很好,但那是JDBC。如果列为null,则double值被视为“bad”,因此每次读取数据库中可为空的原语时都应使用wasNull()进行检查。

答案 1 :(得分:15)

根据您的JDBC驱动程序和数据库,您可以使用盒装类型和强制转换:

Double doubleValueOrNull = (Double)rs.getObject(1); // or .getObject("columnName")

如果列为null,则为NULL

如果更改数据库,请小心检查这是否仍然有效。

答案 2 :(得分:4)

使用:

rs.getObject(1)==null?null:rs.getBigDecimal(1).doubleValue()

答案 3 :(得分:4)

或者使用java 8,您可以这样做:

windows.onload = function(){
  // move your code here
}

答案 4 :(得分:0)

Kotlin版本以检索可为空的字段:

val parentId = resultSet.getObject("parent_id") as Double?