ian*_*cho 266 java null resultset
在Java中,我试图从ResultSet中测试一个空值,其中列被转换为原始int类型.
int iVal;
ResultSet rs = magicallyAppearingStmt.executeQuery(query);
if (rs.next()) {
if (rs.getObject("ID_PARENT") != null && !rs.wasNull()) {
iVal = rs.getInt("ID_PARENT");
}
}
Run Code Online (Sandbox Code Playgroud)
从上面的代码片段,有更好的方法来做到这一点,我假设第二个isNull()测试是多余的?
教育我们,谢谢
Ric*_*ard 349
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
}
}
Run Code Online (Sandbox Code Playgroud)
(编辑为@martin评论如下;编写的OP代码无法编译,因为iVal未初始化)
小智 81
另一种方案:
public class DaoTools {
static public Integer getInteger(ResultSet rs, String strColName) throws SQLException {
int nValue = rs.getInt(strColName);
return rs.wasNull() ? null : nValue;
}
}
Run Code Online (Sandbox Code Playgroud)
And*_*s_D 28
我认为,这是多余的.rs.getObject("ID_PARENT")应返回一个Integer对象,或者null,如果列值实际是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
}
}
Run Code Online (Sandbox Code Playgroud)
Bal*_*usC 25
只需检查该字段是否null使用ResultSet#getObject().-1用你想要的任何null-case值替换.
int foo = resultSet.getObject("foo") != null ? resultSet.getInt("foo") : -1;
Run Code Online (Sandbox Code Playgroud)
或者,如果您可以保证使用正确的DB列类型,以便ResultSet#getObject()真正返回Integer(因此不是Long,Short或Byte),那么您也可以将它强制转换为Integer.
Integer foo = (Integer) resultSet.getObject("foo");
Run Code Online (Sandbox Code Playgroud)
Pet*_*ans 11
你可以简单地使用AFAIK
iVal = rs.getInt("ID_PARENT");
if (rs.wasNull()) {
// do somthing interesting to handle this situation
}
Run Code Online (Sandbox Code Playgroud)
即使它是NULL.
小智 6
只是 Java 泛型的更新。
您可以创建一个实用程序方法来从给定的 ResultSet 中检索任何 Java 类型的可选值,之前已进行转换。
不幸的是,getObject(columnName, Class) 不返回 null,而是给定 Java 类型的默认值,因此需要 2 次调用
public <T> T getOptionalValue(final ResultSet rs, final String columnName, final Class<T> clazz) throws SQLException {
final T value = rs.getObject(columnName, clazz);
return rs.wasNull() ? null : value;
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,您的代码可能如下所示:
final Integer columnValue = getOptionalValue(rs, Integer.class);
if (columnValue == null) {
//null handling
} else {
//use int value of columnValue with autoboxing
}
Run Code Online (Sandbox Code Playgroud)
很高兴得到反馈
| 归档时间: |
|
| 查看次数: |
234441 次 |
| 最近记录: |