从ResultSet获取Integer对象

Wil*_*kar 41 java jdbc

A ResultSet提供getInt()返回原语的方法int.是否有可能获得Integer允许的物体null?我正在检索的DB字段是可空的,只要字段是,getInt()0就会返回null.

谢谢

Bal*_*usC 45

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

Integer foo = resultSet.getObject("foo") != null ? resultSet.getInt("foo") : null;
Run Code Online (Sandbox Code Playgroud)

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

Integer foo = (Integer) resultSet.getObject("foo");
Run Code Online (Sandbox Code Playgroud)

更新:适用于Java 1.7+

Integer foo = resultSet.getObject("foo", Integer.class);
Run Code Online (Sandbox Code Playgroud)

  • 那么`Integer foo =(Integer)rs.getObject("foo");`?(或使用try-catch来捕获转换错误并根据需要将其设置为null /报告错误). (3认同)
  • 请小心您的驱动程序和数据库。不幸的是,当列为空时,“resultSet.getObject("foo", Integer.class)”为我返回 0。`(Integer) resultSet.getObject("foo")` 返回 null。我用过Oracle驱动程序。 (2认同)

Pet*_*ang 11

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

文档:

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


Sai*_*ish 7

有一种更简单的方法.只需输入它.如果为null,则为null.如果有效,则它将成为自动装箱对象.

(Integer) resultSet.getObject("foo")
Run Code Online (Sandbox Code Playgroud)