如何使用jdbc为特定oracle类型返回java类型?

js81xvg6  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(451)

我正在寻找一种基于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

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

hujrc8aj

hujrc8aj1#

使用浮点类型,如 floatdouble 不适用于精确的数字类型,如 NUMBER(19,4) 因为这可能会导致精度下降。 java.math.BigDecimal 也是精确数字类型,因此是由精确数字类型的jdbc规范Map定义的类型。
您无法覆盖或配置此Map,因此如果要应用其他Map,则需要自己编写。

相关问题