如何将Oracle Number(19)转换为Java Long?
如何将Oracle数字(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
(数字(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;
}