jdbctemplate呼叫儲存過程傳遞陣列引數

livedba發表於2012-06-06

1.java.lang.ClassCastException: oracle.jdbc.driver.T4CConnection cannot cast to oracle.jdbc.connection

2.無效的列名稱型別

[@more@]

第一個錯誤的解決分為兩步:先把從jndi獲取的資料來源的connection轉換為nativeConnection,轉換的方法是:

con = con.getMetaData().getConnection();

然後把專案web/WEB-INF/lib/下的ojdbc14.jar刪除,用web容器裡的ojdbc14.jar,否則會報第一個錯誤

第二個錯誤解決:

先建立type

create type type_test as table of number;

完整呼叫方法:

this.getJdbcTemplate().execute(new CallableStatementCreator(){
@Override
public CallableStatement createCallableStatement(Connection con) throws SQLException {
String execuSql = "{call PKG_TEST.LIST_TEST(?)}";
CallableStatement cs = con.prepareCall(execuSql);
Object[] obj = new Object[5];
obj[0] = 0;
obj[1] = 1;
obj[2] = 2;
obj[3] = 3;
obj[4] = 4;


con = con.getMetaData().getConnection();

ArrayDescriptor desc = ArrayDescriptor.createDescriptor("TYPE_TEST",con);
ARRAY array = new ARRAY(desc,con,obj);
cs.setArray(1,array);
return cs;
}
},new CallableStatementCallback(){
@Override
public String doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
cs.execute();
return "SUCCESS";
}
});

參考:

http://www.devx.me/java/the-method-for-passing-arrays-para-to-oracle.html

http://zhang-yingjie-qq-com.iteye.com/blog/322325

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25261409/viewspace-1058443/,如需轉載,請註明出處,否則將追究法律責任。

相關文章