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

如何将Oracle Number(19)转换为Java Long?,java,oracle,spring-jdbc,Java,Oracle,Spring Jdbc,如何将Oracle数字(19)转换为Java Long?(数字(19)表示与Java Long等价) 我不想使用Long.parseLong或Long.valeOf,因为两者都会引发异常 这是我的数据库数据 ColName (Foreign key, Nullable) 1 null 100325 null 以下是我尝试的备选方案 1) program.setXX(rs.getLong(“colName”)) 它返回值(1,0100325,0)。空值将替换为0 2)program.s

如何将Oracle数字(19)转换为Java Long?
(数字(19)表示与Java Long等价)

我不想使用Long.parseLong或Long.valeOf,因为两者都会引发异常

这是我的数据库数据

 ColName (Foreign key, Nullable)
 1
 null
 100325
 null

以下是我尝试的备选方案
1)
program.setXX(rs.getLong(“colName”))

它返回值(1,0100325,0)。空值将替换为0
2)
program.setXX((长)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),只要DB有null值,Java就应该保留它,只要DB有long值(非null),Java就应该保留它。

我在spring JDBC模板行映射器中执行此操作,

上述步骤是否有替代方法?类似于某些Apache实用工具方法或Spring内置方法。

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

编辑:

我想我理解你的困惑

在Java中,基本类型是
int
boolean
long
。这些是本机类型,不能存储空值。只有像
String
Long
(注意大写)或
Scanner
这样的对象类型才能存储空值。因此,如果您有一个函数正在接受一个
long
,那么您将无法传递一个空值,因为
long
s不能存储空值。接受
long
的函数需要修改以接受对象,如
long
,或者您需要自己处理
null
情况

没有其他选择。

使用

ResultSet rs;
...
Long aLong = rs.getLong("MY_COLUMN");
if ( rs.wasNull() ) {
    aLong = null;
}
本例假设至少有Java5(自动装箱)。如果您不在Java5上,那么您将需要做更多的工作来将long转换为long


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

您正在寻找什么替代方案?到目前为止,请显示您的源代码。您可以重新表述您的问题吗?使用
ResultSet
的方法。似乎您正在尝试将字符串解析为long,而不是使用getLong()从结果集中实际获取long。apachelang的numberrutils中还提供了解析数字的替代实现。它们不会抛出异常,而是返回默认值。但我怀疑这就是你想要解决的问题。我不想要手动代码,我正在寻找一些实用的方法。请重新查看我的问题,我已对其进行了更新。感谢您理解我的视图,现在我将使用您建议的方式,因为没有其他选项。此方法将空值转换为0,我不希望出现此行为。请重新查看我的问题,我已经更新了。您可以使用rs.wasNull()进行更新。我会更新我的答案。我喜欢你的选择,因为没有现成的选择。
ResultSet rs;
...
Long aLong = rs.getLong("MY_COLUMN");
if ( rs.wasNull() ) {
    aLong = null;
}