JBoss數(shù)據(jù)源連接不能創(chuàng)建存儲過程數(shù)組輸入?yún)?shù)的解決方法
在使用JBoss Datasource獲取connection并為Oracle存儲過程創(chuàng)建數(shù)組輸入?yún)?shù)時,有時會遇到的問題。本文將介紹一種基于ojdbc7的反射機制解決方法。獲取Connection和
在使用JBoss Datasource獲取connection并為Oracle存儲過程創(chuàng)建數(shù)組輸入?yún)?shù)時,有時會遇到的問題。本文將介紹一種基于ojdbc7的反射機制解決方法。
獲取Connection和創(chuàng)建Array輸入?yún)?shù)
通常我們從Datasource獲取connection后,會使用如下方式創(chuàng)建ARRAY輸入數(shù)組參數(shù):
```
ArrayDescriptor descriptor ("ARRAY_TYPE", connection.unwrap());
ARRAY array new ARRAY(descriptor, connection.unwrap(), inputArray);
```
然而,由于Datasource返回的是一個OracleConnection Wrapper,而ArrayDescriptor需要一個,因此會拋出ClassCastException。
解決ClassCastException問題
根據(jù)以往經(jīng)驗,我們可以通過獲取Wrapper的underlying connection來獲得的實例。但是在某些情況下,會報 cannot be cast to 的奇怪錯誤。這個問題的原因比較復(fù)雜,可能是由于JBoss本身ClassLoader加載了不同版本的WrappedConnectionJDK6。
使用反射機制創(chuàng)建存儲過程數(shù)組輸入?yún)?shù)
在ojdbc7中,ArrayDescriptor和ARRAY類已被廢除,取而代之的是方法。但是我們不能直接調(diào)用這個方法,而是需要通過反射機制調(diào)用getUnderlyingConnection()方法和createARRAY()方法來創(chuàng)建存儲過程的數(shù)組輸入?yún)?shù)。
解決方法步驟
1. 通過反射獲取connection對象的underlying connection。
2. 使用反射調(diào)用underlying connection的createARRAY方法,傳入相應(yīng)的參數(shù)以創(chuàng)建存儲過程的數(shù)組輸入?yún)?shù)。
通過以上步驟,我們可以成功創(chuàng)建存儲過程的數(shù)組輸入?yún)?shù),避免了ClassCastException等問題。
總結(jié):
本文介紹了在使用JBoss Datasource獲取connection并為Oracle存儲過程創(chuàng)建數(shù)組輸入?yún)?shù)時可能遇到的問題,并提供了一種基于ojdbc7的反射機制解決方法。通過該方法,我們可以順利地創(chuàng)建存儲過程的數(shù)組輸入?yún)?shù),提高了代碼的穩(wěn)定性和可靠性。