java - 如何使用 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”。有人知道如何解决这个问题吗?还是我只是被迫编写自己的方法来返回我选择的类型?
解决方案
使用浮点类型float
或double
不适合精确数字类型,NUMBER(19,4)
因为它可能导致精度损失。java.math.BigDecimal
也是精确数值类型,因此是精确数值类型的 JDBC 规范映射定义的类型。
您不能覆盖或配置它,因此如果您想应用不同的映射,您需要自己编写。
推荐阅读
- javascript - sails.js - 当地人问题(发表评论)
- documentation - 可以从多个存储库发布 docusaurus 交叉存储库,以将文档聚合在一起吗?
- sql - 尝试在 ms 访问中创建具有 3 个外键的表
- rust - 编译 libpvm-rs 失败 https://github.com/cadets/libpvm-rs.git
- javascript - 检查对象数组是否包含对象
- javascript - Firestore 规则:通过 threadId 以安全的方式获取消息线程
- jenkins - 如何获取可以通过API登录jenkins的用户列表
- c++ - 为什么我可以在编译时评估接收 std::pair 的函数,但不能断言它?
- javascript - 网站如何跟踪用户在推荐页面上花费的时间?
- php - 通过连接调用 PHP 函数