使用 OJDBC8 驱动程序的 Java 在插入 Oracle(19c) 中定义为 NUMBER 的列时会删除小数值

问题描述 投票:0回答:1

使用 OJDBC8 驱动程序的 Java 统计在插入定义为 NUMBER 的列时会删除小数值。

使用 OJDBC7.jar 时不会出现这种情况。客户端正在使用 Oracle 19c 数据库,该数据库需要 OJDBC8.jar,并希望使用 OJDBC7.jar 中未提供的安全连接

OJDBC8 中数据类型从 Java 转换为 Oracle 的方式有什么变化吗?

我相信 Oracle NUMBER 与 float 、 double 、 bigdecimal 等兼容 我在 Java 中使用 Double,在 Oracle 中使用 NUMBER

我的十进制值下降问题在 OJDBC7 中没有出现,但在 OJDBC8 中却出现了。

eg:- 如果我的值为 52.37 ,使用 OJDBC8 时仅得到 52 但仅使用 OJDBC7 即可获得 52.37

java oracle decimal sqldatatypes ojdbc
1个回答
0
投票

不,这并不是新版本的 OJDBC 开始错误处理十进制值的情况。

但是,您应该确保 Oracle 中的

NUMBER
列的小数位数不为零。 如果是,Oracle 将默默地删除所有小数值。

例如,

CREATE TABLE matt_test ( dbl NUMBER(38,0) NOT NULL );
Table MATT_TEST created. 

INSERT INTO matt_test ( dbl ) VALUES ( 52.37 );
1 row inserted.

SELECT * FROM matt_test;

    DBL
----------
        52

要检查您的列,您可以像这样查询

DBA_TAB_COLUMNS

SELECT data_scale
FROM   dba_tab_columns 
WHEREe owner = user   -- Or your table's owner
AND    table_Name = 'MATT_TEST';

确保它不为零(NULL 就可以)。

© www.soinside.com 2019 - 2024. All rights reserved.