【发布时间】:2011-08-18 10:02:41
【问题描述】:
ResultSet 提供了返回原始 int 的方法 getInt()。是否可以获得允许null 的Integer 对象?我正在检索的 DB 字段可以为空,并且只要字段为 null,getInt() 就会返回我 0。
谢谢
【问题讨论】:
ResultSet 提供了返回原始 int 的方法 getInt()。是否可以获得允许null 的Integer 对象?我正在检索的 DB 字段可以为空,并且只要字段为 null,getInt() 就会返回我 0。
谢谢
【问题讨论】:
只需检查该字段是否为null 或不使用ResultSet#getObject()。
Integer foo = resultSet.getObject("foo") != null ? resultSet.getInt("foo") : null;
或者,如果您可以保证使用正确的 DB 列类型,以便 ResultSet#getObject() 真正返回 Integer(因此不是 Long、Short 或 Byte),那么您也可以只对它进行类型转换。
Integer foo = (Integer) resultSet.getObject("foo");
更新:对于 Java 1.7+
Integer foo = resultSet.getObject("foo", Integer.class);
【讨论】:
Integer foo = (Integer) rs.getObject("foo"); 怎么样? (或使用 try-catch 捕获转换错误并根据需要将其设置为 null/报告错误)。
Integer 时才有效。查看更新的答案。
resultSet.getObject("foo", Integer.class) 为我返回了 0。 (Integer) resultSet.getObject("foo") 返回空值。我用过Oracle驱动。
有一个更简单的方法。只需键入 cast 即可。如果为空,它将为空。如果有效,则成为自动装箱对象。
(Integer) resultSet.getObject("foo")
【讨论】:
您可以在检索到值后检查wasNull。
报告最后读取的列是否具有 SQL NULL 值。
请注意,您必须首先对列调用其中一个 getter 方法以尝试读取其值,然后调用方法 wasNull 以查看读取的值是否为 SQL NULL。
【讨论】: