首页 > 解决方案 > Oracle DB 19c 返回的自动生成键的负值

问题描述

我们使用 Oracle 数据库 (19c) 中的 IDENTITY 列作为表的主键。

对于一些内部逻辑,我们使用 getAutoGeneratedKeys() 来获取创建的实体的 ID。但结果集中返回的 ID 存在一些差异。

以下是获取自动生成的密钥的代码。

String keyCols[] = {"ID"};  
        ps = connection.prepareStatement(queryToInsertEntity, keyCols);  
        ps.executeBatch();  
        resultSet = ps.getGeneratedKeys();  
        while (resultSet.next()) {  
            logger.trace("Entity ID:{}", resultSet.getBigDecimal(1));  
        }

例如,对于几个实体,结果集返回的 ID 类似于一个(带有负值):实体 ID:-4.3692522E-31

而且,对于几个实体,返回的 ID 如下
实体 ID:1591017024

所以问题是为什么 resultSet.getBigDecimal() 在不同的时间返回不同的值。实体永远不能有负 ID,因为 Identity 列的最小值是 1。

它是否与 getAutoGeneratedKeys() 方法有关?

标签: javaoraclejdbcojdbcoracle19c

解决方案


推荐阅读