java.math.BigInteger 无法转换为 java.math.BigDecimal

标签 java sql oracle postgresql math

我们正在从 Oracle 迁移到 PostgreSQL。一些特定于 Oracle 的查询必须更改为 Postgres 的等效项。以下是一个这样的提交:

最初,

Query query = getEntityManager().createNativeQuery("SELECT PC_SITE_GROUP_ID_SEQ.NEXTVAL from DUAL");
BigDecimal result = (BigDecimal) query.getSingleResult();

改为,

Query query = getEntityManager().createNativeQuery("SELECT NEXTVAL('pc_site_group_id_seq')");
BigDecimal result = (BigDecimal) query.getSingleResult();

运行时,修改后报错,

java.math.BigInteger cannot be cast to java.math.BigDecimal

我的问题是为什么它之前有效? 提醒一下,第一个更改是在 Oracle 数据库上运行的,而第二个更改是在 Postgres 数据库上运行的。请帮忙。

最佳答案

Oracle 在数据库中没有“整数”数据类型,因此所有内容都由驱动程序映射到 BigDecimal。

在 Postgres 中,整数(或 bigint)和小数之间有明显的区别,因此驱动程序为 bigint 值返回一个 BigInteger。

序列总是发出 bigint 值,因此驱动程序会为它们返回一个 BigInteger

关于java.math.BigInteger 无法转换为 java.math.BigDecimal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48398416/

相关文章:

java - 为什么 JAX-WS 调用返回的 map 总是空的?

java - 使用 jni 时将第三方线程附加到 vm

c# - 交换单元格数据会违反唯一约束,尽管整体更改是有效的

oracle - ORA-00984 : column not allowed here

java - 如何保护从 OAuth 保护的资源中提取数据的 Android 应用程序

Java HashMap containsKey 始终为 false

sql - Delphi null 参数在哪里

sql - oracle:用斜杠格式化数字

Mysql从group by中减去两行值

sql - 更新 Oracle 的查询 if 语句