java 使用CallableStatement时,只能像BigDecimal那样恢复NUMBER类型的列

gab6jxml  于 2023-09-29  发布在  Java
关注(0)|答案(1)|浏览(88)

我使用CallableStatement通过Java传递存储过程参数。
但是,当我试图获取一些“NUMBER”类型的值时,我不能用途:

CallableStatement.getLong(1)

因为,所有的“NUMBER”参数都像BigDecimal一样。
有什么想法吗?
例如-数据库内部:

Procedure LookingForSomething(myNumber OUT NUMERIC);

Java:

Long myNumber = CallableStatement.getLong("myNumber"); - doesn't work
axr492tv

axr492tv1#

根据JavaDocs of CallableStatement方法getLong ...
以Java编程语言中的long形式检索JDBC BIGINT参数的值。
getBigDecimal ...
以java.math.BigDecimal对象的形式检索JDBCNUMERIC参数的值,小数点右侧的数字数与该值所包含的数字数相同。
因此,由于数据库类型是NUMERIC而不是BIGINT,因此必须使用getBigDecimal
NUMERIC是一种带有小数位的数据类型,因此long不能包含所有可能的值,因为它是一种整数数据类型。
如果您确定没有收到小数部分,并且您的数字适合long,则可以使用

long myNumber = CallableStatement.getNumeric("myNumber").longValue();

有关longValue()的详细信息,您可以查看JavaDocs。

相关问题