2015-05-24 128 views
0

我面臨例外在線路鑄造BIGDECIMAL到整數

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類型在數據庫中的一側的coloumn。我不確定這張照片有多大的小數點?

回答

2

您從數組中提取的元素的類型爲BigDecimal。您無法將BigDecimal強制轉換爲Integer。將轉換替換爲Integer並轉換爲BigDecimal,它應該可以工作。

+0

執行的查詢是「從px_cdusage pcu選擇pcp.code,pcu.status,px_cdpool pcp其中pcu.px_cdpool_id = pcp.px_cdpool_id和pcp.usagetype = 0並且pcp.code in(從ordpromocd選擇代碼where orders_id = 8443468 )「,並且pcu.status在這裏顯示SMALLINT作爲它在oracle上的類型。請參閱鏈接http://www-01.ibm.com/support/knowledgecenter/SSZLC2_7.0.0/com.ibm.commerce.database.doc/database/px_cdusage.htm –

+0

這是數據庫類型。它不必反映它在Java中的類型。現在,這部分異常告訴我你已經有了一個BigDecimal,並且你試圖將它轉換爲Integer。您也可以使用調試器查看'vecColumns'的內容並親自查看。 '在處理過程中發生以下命令異常:「java.lang.ClassCastException:java.math.BigDecimal與java.lang.Integer不兼容」.' – mpkorstanje

1

異常行爲的原因是,儘管PX_CDUSAGE將列定義爲SMALLINT,但它確實在Oracle數據庫中映射爲NUMBER(38),而該數據庫又被表示爲BigDecimal Java對象,這解釋了爲什麼vecColumn.elementAt(1)包含BigDecimal而不是預期的Integer

進一步的細節可以在這裏找到:現在Error description

,作爲一種解決方案,一個簡單的鑄件爲BigDecimal,而不是整數,以避免拋出ClassCastException,因爲mpkorstanje正確地指出,但因爲這似乎是代碼,你不能改變,我建議檢查禁用檢查鏈接中的指示修復。這可能是唯一可能的解決方案,無需更改列類型。

+0

非常感謝mpkorstanje和fsb。實際上,提供此代碼的供應商給APAR解決了這個問題。安裝Tyis APAR後,他們可能會更改代碼。 –