我正在使用旧的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
?
答案 0 :(得分:3)
很难说出A
数据类型对您的供应商意味着什么,但一般来说我希望看到整数列的I
。 A
可能代表“字母数字”,它实际上不是数据类型,而是内容描述,数据类型为CHAR(15)
(基于空值包含15的事实)空格)。
确定您可以从java.sql.ResultSetMetaData
找到实际的数据类型。
答案 1 :(得分:0)
不知道这可能有所帮助,但试试看,
您可以使用以下方法获取与该列相关的InputStream
个对象,
rs.getAsciiStream(columnNumber)
rs.getCharacterStream(columnNumber)