Java 将Bigdecimal转换为整数

Java 将Bigdecimal转换为整数,java,casting,Java,Casting,我在排队时遇到了一个例外 int cdStatus = ((Integer)vecColumns.elementAt(1)).intValue(); 00000050 CommerceSrvr E com.ibm.commerce.command.ECCommandTarget executeCommand CMN0420E: The following command exception has occurred during processing: "java.lang.Clas

我在排队时遇到了一个例外

int cdStatus = ((Integer)vecColumns.elementAt(1)).intValue();


 00000050 CommerceSrvr  E com.ibm.commerce.command.ECCommandTarget executeCommand CMN0420E: 
 The following command exception has occurred during processing: "java.lang.ClassCastException: java.math.BigDecimal incompatible with java.lang.Integer". 
 java.lang.ClassCastException: java.math.BigDecimal incompatible with java.lang.Integer
    at com.ibm.commerce.promotion.facade.server.commands.ValidateUniquePromotionCodesTaskCmdImpl.verifyPromotionCodes(ValidateUniquePromotionCodesTaskCmdImpl.java:137)
    at com.ibm.commerce.promotion.facade.server.commands.ValidateUniquePromotionCodesTaskCmdImpl.performExecute(ValidateUniquePromotionCodesTaskCmdImpl.java:84)

这里veColumn是一个向量,elementAt(1)是数据库中的一个列,在数据库端为smallInt类型。我不确定这张图片中的小数有多大?

您从数组中提取的元素的类型为BigDecimal。不能将BigDecimal强制转换为整数。将强制转换为整数替换为强制转换为BigDecimal,它应该可以工作。

从数组中提取的元素的类型为BigDecimal。不能将BigDecimal强制转换为整数。将强制转换为整数替换为强制转换为BigDecimal,它应该可以工作。

从数组中提取的元素的类型为BigDecimal。不能将BigDecimal强制转换为整数。将强制转换为整数替换为强制转换为BigDecimal,它应该可以工作。

从数组中提取的元素的类型为BigDecimal。不能将BigDecimal强制转换为整数。将强制转换为整数替换为强制转换为BigDecimal,它应该可以工作。

这种异常行为的原因是,即使PX_CDUSAGE将列定义为SMALLINT,它实际上在Oracle数据库中映射为一个数字(38),而Oracle数据库又表示为BigDecimal Java对象,这解释了为什么
vecColumn.elementAt(1)
包含一个
大十进制
而不是预期的
整数

更多详细信息可在此处找到:


现在,作为一个解决方案,一个简单的转换为BigDecimal而不是Integer以避免ClassCastException,正如mpkorstanje正确指出的那样,但由于这似乎是您无法更改的代码,我建议检查禁用检查链接中指示的修复。这可能是不更改列类型的唯一可能的解决方案。

出现这种异常行为的原因是,即使PX_CDUSAGE将列定义为SMALLINT,但它确实在Oracle数据库中映射为数字(38),而Oracle数据库又表示为BigDecimal Java对象,这解释了为什么
vecColumn.elementAt(1)
包含一个
大十进制
而不是预期的
整数

更多详细信息可在此处找到:


现在,作为一个解决方案,一个简单的转换为BigDecimal而不是Integer以避免ClassCastException,正如mpkorstanje正确指出的那样,但由于这似乎是您无法更改的代码,我建议检查禁用检查链接中指示的修复。这可能是不更改列类型的唯一可能的解决方案。

出现这种异常行为的原因是,即使PX_CDUSAGE将列定义为SMALLINT,但它确实在Oracle数据库中映射为数字(38),而Oracle数据库又表示为BigDecimal Java对象,这解释了为什么
vecColumn.elementAt(1)
包含一个
大十进制
而不是预期的
整数

更多详细信息可在此处找到:


现在,作为一个解决方案,一个简单的转换为BigDecimal而不是Integer以避免ClassCastException,正如mpkorstanje正确指出的那样,但由于这似乎是您无法更改的代码,我建议检查禁用检查链接中指示的修复。这可能是不更改列类型的唯一可能的解决方案。

出现这种异常行为的原因是,即使PX_CDUSAGE将列定义为SMALLINT,但它确实在Oracle数据库中映射为数字(38),而Oracle数据库又表示为BigDecimal Java对象,这解释了为什么
vecColumn.elementAt(1)
包含一个
大十进制
而不是预期的
整数

更多详细信息可在此处找到:


现在,作为一个解决方案,一个简单的转换为BigDecimal而不是Integer以避免ClassCastException,正如mpkorstanje正确指出的那样,但由于这似乎是您无法更改的代码,我建议检查禁用检查链接中指示的修复。这可能是不更改列类型的唯一可能的解决方案。

执行的查询是“从px_cdusage pcu,px_cdpool pcp中选择pcp.code,pcu.status,其中pcu.px_cdpool\u id=pcp.px_cdpool\u id和pcp.usagetype=0和pcp.code in(从orders\u id=8443468的ordpromocd中选择代码)”pcu.status在这里的场景中,它将SMALLINT显示为它在oracle上的类型。请参考作为数据库类型的链接。它不必反映它在Java中变成的类型。现在,异常的这一部分告诉我,您有一个BigDecimal,并且您试图将其转换为整数。您还可以使用调试器查看
vecColumns
的内容,并亲自查看<代码>在处理过程中发生以下命令异常:“java.lang.ClassCastException:java.math.BigDecimal与java.lang.Integer不兼容”。执行的查询是“从px_cdusage pcu、px_cdpool pcp中选择pcp.code、pcu.status,其中pcu.px_cdpool_id=pcp.px_cdpool_id和pcp.usagetype=0和pcp.code in(从ordpromocd中选择代码,其中orders_id=8443468)”这里的pcu.status在场景中显示了SMALLINT作为其在oracle上的类型。请参考数据库类型的链接。它不必反映它在Java中变成的类型。现在这部分异常告诉我,您有一个BigDecimal,您正试图将其转换为整数。您还可以查看
v的内容ecColumns
使用调试器并自行查看。
处理过程中出现以下命令异常:“java.lang.ClassCastException:java.math.BigDecimal与java.lang.Integer不兼容”。
执行的查询是“从px_cdusage pcu、px_cdpool pcp中选择pcp.code、pcu.status,其中pcu.px_cdpool_id=pcp.px_cdpool_id,pcp.usagetype=0,pcp.code in(从ordpromocd中选择代码,其中orders_id=8443468)“此处的pcu.status在场景中显示SMALLINT作为其在oracle上的类型。请参考作为数据库类型的链接。它不必反映其成为的类型