我们的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 编号的正确方法是什么?
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)这样的东西,术语"变量"与"列"的含义完全不同......