【问题标题】:Getting Integer object from ResultSet [duplicate]从 ResultSet 获取整数对象 [重复]
【发布时间】:2011-08-18 10:02:41
【问题描述】:

ResultSet 提供了返回原始 int 的方法 getInt()。是否可以获得允许nullInteger 对象?我正在检索的 DB 字段可以为空,并且只要字段为 nullgetInt() 就会返回我 0

谢谢

【问题讨论】:

    标签: java jdbc


    【解决方案1】:

    只需检查该字段是否为null 或不使用ResultSet#getObject()

    Integer foo = resultSet.getObject("foo") != null ? resultSet.getInt("foo") : null;
    

    或者,如果您可以保证使用正确的 DB 列类型,以便 ResultSet#getObject() 真正返回 Integer(因此不是 LongShortByte),那么您也可以只对它进行类型转换。

    Integer foo = (Integer) resultSet.getObject("foo");
    

    更新:对于 Java 1.7+

    Integer foo = resultSet.getObject("foo", Integer.class);
    

    【讨论】:

    • 它也应该是低效的,因为只要不使用构造函数(Boolean.TRUE 和 FALSE),对 Boolean 的引用就会被缓存。
    • 谢谢。不幸的是,它添加了样板代码。希望有更清洁的方式。
    • Integer foo = (Integer) rs.getObject("foo"); 怎么样? (或使用 try-catch 捕获转换错误并根据需要将其设置为 null/报告错误)。
    • 只有在 DB 列类型映射到 Java Integer 时才有效。查看更新的答案。
    • 小心您的驱动程序和数据库。不幸的是,当列为空时,resultSet.getObject("foo", Integer.class) 为我返回了 0。 (Integer) resultSet.getObject("foo") 返回空值。我用过Oracle驱动。
    【解决方案2】:

    有一个更简单的方法。只需键入 cast 即可。如果为空,它将为空。如果有效,则成为自动装箱对象。

    (Integer) resultSet.getObject("foo")
    

    【讨论】:

      【解决方案3】:

      您可以在检索到值后检查wasNull

      来自documentation

      报告最后读取的列是否具有 SQL NULL 值。
      请注意,您必须首先对列调用其中一个 getter 方法以尝试读取其值,然后调用方法 wasNull 以查看读取的值是否为 SQL NULL。

      【讨论】:

      • 不幸的是,这在单个代码行中不太可行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 2012-09-30
      • 2013-04-09
      • 2023-03-18
      • 1970-01-01
      相关资源
      最近更新 更多