jdbc ClassCastException:java。与java不兼容。数学大十进制
这个例外以一种非常奇怪的方式出现
我从一个类型为DECIMAL(15,4)的存储过程中读取变量的值 在java端,我将这个值转换为BigDecimal,它运行得非常好。 现在我开始遇到这个例外:java。ClassCastException:java。与java不兼容。数学BigDecimal为了解决这个问题,我将这个变量类型转换为Double,然后使用
新的:
Double myVarDb= //reading some variable's value with type-> DECIMAL(15,4) from Db end
BigDecimal myVar = (BigDecimal)BigDecimal.valueOf(myVarDb);
旧的:
BigDecimal myVar= //reading some variable's value with type-> DECIMAL(15,4)
如果有人遇到过这个问题,或者知道它为什么会出现,请指导
更新:我检查了两个驱动程序,以下是版本:
旧版本:DriverVersion:3.6.60
新版本:DriverVersion:3.64.106
我在读取值后创建的实例类型为:
老:大十进制
新:双人
所以现在问题很清楚,为什么我们会得到这个异常,因为我们现在得到的是双对象作为默认对象
那么,有人能解释一下为什么会创建这些不同类型的实例吗? 这是因为JDBC驱动程序的版本不同吗
# 1 楼答案
为什么要将值转换为Double,然后尝试将其转换为bigDecimal,这是错误的。没有必要让它变得更难、更复杂
在Java和JDBC中,所有十进制值都映射为BigDecimal,ResultSet的
getBigDecimel()
方法允许您直接获取BigDecimal您只需使用以下代码行:
而不是所有这些(这是非常糟糕的):
你可以从Mapping SQL and Java Types中看到:
注意:
在旧代码中,出现强制转换异常的原因可能是您没有使用。getBigDecimal()方法