首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java8:数值为NUMBER(x,0)的Resultset.getBigDecimal错误

Java8:数值为NUMBER(x,0)的Resultset.getBigDecimal错误
EN

Stack Overflow用户
提问于 2016-08-25 23:57:28
回答 2查看 1.2K关注 0票数 1

我遇到了一个奇怪的错误,Java代码可以在Java6中正确运行,现在在Java8中编译和运行时会抛出一个"SQLException: Invalid column index“。

我的表中的SQL值的类型是:NUMBER(2,0),如果我理解得很好的话,它实际上是一个整数值。

在Java 6中工作的代码是:

代码语言:javascript
复制
BigDecimal idPointHoraire = oResultset.getBigDecimal("ID_POINT_HORAIRE");

在Java 8中,我必须使用中间整数:

代码语言:javascript
复制
BigDecimal idPointHoraire = new BigDecimal(oResultset.getInt("ID_POINT_HORAIRE"));

问题是:为什么这种行为现在在Java 8中是正确的,而在Java 6中是正确的?

EN

回答 2

Stack Overflow用户

发布于 2016-08-26 03:45:48

虽然" number (2, 0 )“对您来说直观上是一个Integer,但它仍然是一个decimal数据类型;您只是将小数之后的位数限制为0。所以,如果这个行为已经改变了,那么,它可能只是被纠正了。

如果您真的希望数据库列是一个整数...好吧,让它成为一个整型的神谕类型。

BigDecimal应该映射NUMBER数据类型,它很可能是在驱动程序中实现的。您可以尝试降级您的oracle驱动程序,看看这是否会有所改变。

票数 0
EN

Stack Overflow用户

发布于 2020-06-17 17:47:57

最后,对于从格式为NUMBER(X,0)的Oracle到Java检索number类型的不一致行为,解决方法是编写一个小方法:

代码语言:javascript
复制
    public BigDecimal getBigDecimalSafe(ResultSet resultSet, String columnName) throws SQLException{
    BigDecimal bigDecimal = null;
    if(resultSet.getString(columnName) != null){
        bigDecimal = new BigDecimal(resultSet.getString(columnName));
    }
    return bigDecimal;
}

中间resultSet.getString总能检索到整型或小数型的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39149843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档