如何将 PL/SQL 编号读入 Java ResultSet



我们的PL/SQL数据库有三个NUMBER变量,分别代表确切的日,月和年。

我想将这些值读入 Java 中的字符串中以显示,但是 rs.getString("[Number_field]") 会处理"无效的列名"异常,rs.getInt("[Number_field]") 也会这样做(请参阅下面的代码片段)。 而且,由于单词"number"用于描述编码历史记录中创建的每个字符串转换,因此我无法找到用于 ResultSet 的正确函数的引用。

String sDate1= rs.getString("DATE_MNTH")+"/"+rs.getString("DATE_DT"+"/"+rs.getString("DATE_YEAR"));
Date date=new SimpleDateFormat("MM/DD/yyyy").parse(sDate1);  

从结果集中读取 PL/SQL 编号的正确方法是什么?

根据Oracle

JDBC映射表,Oracle的NUMBER类型(一种精确的类型)映射到Java的BigDecimal。 因此,您可以尝试使用ResultSet#getBigDecimal

String day = rs.getBigDecimal("day_field");
String month = rs.getBigDecimal("month_field");
String year = rs.getBigDecimal("year_field");
String output = year + "-" + month + "-" + day;

但是,您可能需要重新考虑当前的数据库设计。 是否有某种原因不将所有这些信息存储在单个日期或时间戳字段中? 如果这样做了,则可以仅从结果集中检索单个日期字段,并完全避免此问题。

这实际上被证明是我在结果集中返回这些列的方式的错误 - 也就是说,我忘了将它们添加到查询中!

一旦我添加了它们,使它们实际上是结果集的一部分,我发现rs.getString()工作得很好 - rs.getInt()和Tim Biegeleisen建议的rs.getBigDecimal()也是如此。

感谢评论中的 Ivan 让我重新阅读出现的错误消息 - 并让我思考为什么列名无效。

你的陈述中有错别字:

rs.getString("DATE_MNTH")+"/"+rs.getString("

DATE_DT"+"/"+rs.getString("DATE_YEAR"));

您错放了DATE_DT列的结束")"。

实际上,您尝试从rs中获取两列:

DATE_MNTH and
result of concatenation which looks like: DATE_DT/{whatever rs.getString("DATE_YEAR") has} ...

例如"DATE_DT/2019"

我很确定结果集中没有"DATE_DT/2019"这样的列......例外告诉你。

顺便说一句:没有像"PL/SQL DB"(它是Oracle DB)这样的东西,术语"变量"与"列"的含义完全不同......

最新更新