我正在寻找一种基于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”。我更喜欢“浮动”或“双重”。我认为每一个“数字”都只是“大十进制”。有人知道如何解决这个问题吗?或者我只是被迫编写自己的方法来返回我选择的类型?
1条答案
按热度按时间hujrc8aj1#
使用浮点类型,如
float
或double
不适用于精确的数字类型,如NUMBER(19,4)
因为这可能会导致精度下降。java.math.BigDecimal
也是精确数字类型,因此是由精确数字类型的jdbc规范Map定义的类型。您无法覆盖或配置此Map,因此如果要应用其他Map,则需要自己编写。