在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");
}
}
从上面的代码片段中,是否有更好的方法来做到这一点,并且我假设第二个wasNull()测试是多余的?
教育我们,谢谢
只是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;
}
在这个例子中,你的代码如下所示:
final Integer columnValue = getOptionalValue(rs, Integer.class);
if (columnValue == null) {
//null handling
} else {
//use int value of columnValue with autoboxing
}
乐于得到反馈
只是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;
}
在这个例子中,你的代码如下所示:
final Integer columnValue = getOptionalValue(rs, Integer.class);
if (columnValue == null) {
//null handling
} else {
//use int value of columnValue with autoboxing
}
乐于得到反馈