问题

在Java中,我试图从ResultSet测试一个空值,其中列被转换为primitiveinttype。

int iVal;
ResultSet rs = magicallyAppearingStmt.executeQuery(query);
if (rs.next()) {
  if (rs.getObject("ID_PARENT") != null && !rs.wasNull()) {
    iVal = rs.getInt("ID_PARENT");
  }
}

从上面的代码片段,有更好的方法来做到这一点,我假设secondwasNull()test是多余的?

教育我们,谢谢


#1 热门回答(295 赞)

默认值为ResultSet.getInt,当字段值为NULL时,返回0,这也是你的iVal声明的默认值。在这种情况下,你的测试完全是多余的。

如果你真的想要做一些不同的事情,如果字段值是NULL,我建议:

int iVal = 0;
ResultSet rs = magicallyAppearingStmt.executeQuery(query);
if (rs.next()) {
    iVal = rs.getInt("ID_PARENT");
    if (rs.wasNull()) {
        // handle NULL field value
    }
}

(编辑为@martin评论如下;编写的OP代码无法编译,因为iVal未初始化)


#2 热门回答(68 赞)

另一种方案:

public class DaoTools {
    static public Integer getInteger(ResultSet rs, String strColName) throws SQLException {
        int nValue = rs.getInt(strColName);
        return rs.wasNull() ? null : nValue;
    }
}

#3 热门回答(25 赞)

我认为,它是多余的。如果列值实际为NULL,则返回anIntegerobject或null。所以甚至可以做以下事情:

if (rs.next()) {
  Integer idParent = (Integer) rs.getObject("ID_PARENT");
  if (idParent != null) {
    iVal = idParent; // works for Java 1.5+
  } else {
    // handle this case
  }      
}

原文链接