首页 > 解决方案 > 如何使用 JDBC 返回特定 oracle 类型的 java 类型?

问题描述

我正在寻找一种基于 Oracle 类型返回 Java 类型的解决方案。我正在使用 JDBC 连接到数据库。我试图使用ResultSetMetadata,但在我看来它的工作很奇怪。
例如:

create table TMP (
    ID NUMBER(10) not null primary key,
    CODE NUMBER(19,4),
    NAME VARCHAR2(255 char)
)

var query = "SELECT * FROM TMP";
var statement = connection.createStatement();
ResultSet rs = statement.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();
rsmd.getColumnClassName( 1 ); // ---> java.math.BigDecimal
rsmd.getColumnClassName( 2 ); // ---> java.math.BigDecimal
rsmd.getColumnClassName( 3 ); // ---> java.lang.String

如您所见,NUMBER(19,4) ResultSetMetadata 显示“BigDecimal”。我更喜欢“浮动”或“双”。我认为对于每个“数字”,它只是“BigDecimal”。有人知道如何解决这个问题吗?还是我只是被迫编写自己的方法来返回我选择的类型?

标签: javaoraclejdbc

解决方案


使用浮点类型floatdouble不适合精确数字类型,NUMBER(19,4)因为它可能导致精度损失。java.math.BigDecimal也是精确数值类型,因此是精确数值类型的 JDBC 规范映射定义的类型。

您不能覆盖或配置它,因此如果您想应用不同的映射,您需要自己编写。


推荐阅读