2010-11-23 54 views
4

我們有一個使用spring調用DB2存儲過程的應用程序。DB2 JDBC破解彈簧命名參數映射

該應用程序與jdbc版本1.XX.XX(和DB2 V8)一起工作正常。最近升級到DB2 V9使我們轉而使用jdbc versiong 3.58.90。

但是,這似乎已經打破了春季命名參數映射(版本2.5.5)。一些以前工作過的代碼串的呼叫

call storedproc123(:id,:date) 

現在投用

[jcc][t4][10427][12544][3.58.90] Error parsing FLOAT literal value starting at index 19. Error Detail:Unexpected character ':' found in FLOAT literal. 
... 
ERRORCODE=-4463, SQLSTATE=42601 
... 

例外有沒有人遇到類似的東西?

在此先感謝!

---編輯,以增加更多的信息---

我試着換舊的JDBC升級後回來。該應用程序適用於舊驅動程序,但我們希望升級到更新的版本,因爲同一服務器上的另一個應用程序需要這個較新的jdbc,並且很難在我們的服務器上部署相同的jdbc版本(我們使用JBoss)。

http://redneckprogrammer.blogspot.com/2009/10/running-multiple-versions-of-oracle.html討論瞭如何部署相同JDBC驅動程序的多個版本,但是這似乎太過分了,我想盡可能避免它。

+0

您是否試圖手動對新數據庫執行相同的語句?也就是說,你確定這是JDBC錯誤嗎? – 2010-11-23 20:29:36

回答

0

找到原因,請參閱IBM patch PK87567

...

所有連接:驅動程序代碼已得到增強,支持com.ibm.db2.jcc.DB2ParameterMetaData 一個新的API: getParameterMarkerNames,它返回使用的參數 標記名稱的列表SQL語句作爲字符串。 如果屬性 enableNamedParameterMarkers設置爲 DB2BaseDataSource.NOT_SET或DB2BaseDataSource.NO,或者 在SQL語句中沒有命名參數標記,則此方法返回null。 返回的列表包含唯一的參數標記名稱。 如果一個命名參數標記在SQL語句中多次出現,它將只在返回的列表 中出現一次。 (120191)

...

通過啓用標記修復了問題。