使用 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
不,这并不是新版本的 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 就可以)。