我遇到了一个奇怪的错误,Java代码可以在Java6中正确运行,现在在Java8中编译和运行时会抛出一个"SQLException: Invalid column index“。
我的表中的SQL值的类型是:NUMBER(2,0),如果我理解得很好的话,它实际上是一个整数值。
在Java 6中工作的代码是:
BigDecimal idPointHoraire = oResultset.getBigDecimal("ID_POINT_HORAIRE");在Java 8中,我必须使用中间整数:
BigDecimal idPointHoraire = new BigDecimal(oResultset.getInt("ID_POINT_HORAIRE"));问题是:为什么这种行为现在在Java 8中是正确的,而在Java 6中是正确的?
发布于 2016-08-26 03:45:48
虽然" number (2, 0 )“对您来说直观上是一个Integer,但它仍然是一个decimal数据类型;您只是将小数之后的位数限制为0。所以,如果这个行为已经改变了,那么,它可能只是被纠正了。
如果您真的希望数据库列是一个整数...好吧,让它成为一个整型的神谕类型。
BigDecimal应该映射NUMBER数据类型,它很可能是在驱动程序中实现的。您可以尝试降级您的oracle驱动程序,看看这是否会有所改变。
发布于 2020-06-17 17:47:57
最后,对于从格式为NUMBER(X,0)的Oracle到Java检索number类型的不一致行为,解决方法是编写一个小方法:
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总能检索到整型或小数型的值。
https://stackoverflow.com/questions/39149843
复制相似问题