处理ResultSet中的意外返回数据

时间:2014-03-22 18:42:39

标签: java sql db2

我正在使用旧的AS / 400应用程序,该应用程序使用DB2作为底层数据库。

我正在做一些SELECT来获取数据。有一个名为OHOREF的字段,表示Order Header Order Reference ...即。它是订单编号的给定订单的参考编号。我们使用它将网站订单链接到我们的供应商应用程序生成的订单号。在供应商的数据库指南中,此字段列为:

|  Field | Type | Length | Dec | Req. |                   Text                    |   
+--------+------+--------+-----+------+-------------------------------------------+
| OHOREF |  A   |   15   |     |      | Customer/Suppliers Order Number Reference |

这似乎表明此字段存储为整数值,约束不超过15位,并且不允许小数位。所以,如:123456789012345

这个供应商非常无益,并试图“保护”他们的“IP”,并没有提供比我已有的更好的文档。 (叹息

我面临的问题是使用时:

int ohoref = resultSet.getInt(columnNumber);

我发现,当没有参考编号时,此列不为空,而是最多填充填充空格" "。所以,就像" "一样。这会导致抛出Data type mismatch异常。我不知道上表中的"A"字段类型是什么,我认为它对供应商有特殊意义。

除了选择一切作为String之外,还没有更优雅的解决方案来处理这种情况吗?这似乎很糟糕,并且使代码必须在整个地方进行手动转换,增加了出错的潜在风险和/或在其他地方引起问题。类型A是字符串还是Integer

2 个答案:

答案 0 :(得分:3)

很难说出A数据类型对您的供应商意味着什么,但一般来说我希望看到整数列的IA可能代表“字母数字”,它实际上不是数据类型,而是内容描述,数据类型为CHAR(15)(基于空值包含15的事实)空格)。

确定您可以从java.sql.ResultSetMetaData找到实际的数据类型。

答案 1 :(得分:0)

不知道这可能有所帮助,但试试看,

您可以使用以下方法获取与该列相关的InputStream个对象,

   rs.getAsciiStream(columnNumber)
   rs.getCharacterStream(columnNumber)