问题
在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
,则返回anInteger
object或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
}
}