如何将 Oracle Number(19) 转换为 Java Long?

How to Convert Oracle Number(19) to Java Long?

如何将 Oracle Number(19) 转换为 Java Long ?
(Number(19) 表示等同于 java 长按这个 https://docs.oracle.com/cd/E19501-01/819-3659/gcmaz/)

我不想使用 Long.parseLong 或 Long.valeOf,因为它们都会抛出异常。

这是我在数据库中的数据

 ColName (Foreign key, Nullable)
 1
 null
 100325
 null


这是我试过的替代方法
1) program.setXX(rs.getLong("colName"))
它 returns 值 (1,0,100325,0)。 空值替换为 0
2) program.setXX((Long)rs.getObject("colName"));
3) program.setXXX(Long.parseLong(rs.getString("colName")));
4) program.setXXX(Long.valueOf(rs.getString("colName")));
以上 3 个抛出异常,而我的 POJO setter 接受 Long。


我期待 (1,null,100325,null) 这样的结果,Java应该持有吧

我在 spring JDBC 模板 RowMapper 中这样做,
是否有替代上述步骤的方法? 一些 Apache Utility 方法或 Spring 内置方法。

要么捕获异常并以适合您的应用程序的方式处理它(例如将 long 值设置为 0),要么在使用 longValue() 之前先检查该值是否为 null。

Long value = ....
long result;
if (value == null)
{
    // Deal with this situation in a way appropriate for your application
}
else
{
    result = value.longValue();
    // Use the result
}

编辑:

我想我理解你的困惑。

在Java中,基本类型是intbooleanlong。这些是本机类型,不能存储空值。只有像 StringLong(注意大写字母)或 Scanner 这样的对象类型可以存储空值。因此,如果您有一个接受 long 的函数,那么您将无法将空值传递给它,因为 longs 无法存储空值。要么接受long的函数需要修改为接受一个对象,比如Long,要么你需要自己处理null的情况。

别无选择。

使用

ResultSet rs;
...
Long aLong = rs.getLong("MY_COLUMN");
if ( rs.wasNull() ) {
    aLong = null;
}

此示例假定至少 Java 5(自动装箱)。如果您不在 Java 5,您需要做更多的工作才能将多头变成多头。

另外,请注意,可以在 Oracle NUMBER(19) 字段中存储超过 Java 的最大值很长时间的数字。