[英]Call Oracle Stored Procedure from Java
這是我用於調用存儲過程的Java代碼。 我不斷收到錯誤消息:java.lang.ClassCastException:oracle.jdbc.driver.OracleCallableStatementWrapper與oracle.jdbc.OracleCallableStatement不兼容
public Connection initiateDBConnection() throws NamingException, SQLException { Connection result = null; InitialContext initialContext = new InitialContext(); DataSource datasource = (DataSource) initialContext .doLookup(Constants.DATASOURCE_CONTEXT); result = (Connection) WSJdbcUtil .getNativeConnection((WSJdbcConnection) datasource .getConnection()); return result; } public void callStoredProcedure(String procedureName, Map<Integer, Object> map) throws SQLException, NamingException { OracleCallableStatement statement = (OracleCallableStatement) initiateDBConnection() .prepareCall(procedureName); Iterator<Entry<Integer, Object>> params = map.entrySet().iterator(); while (params.hasNext()) { Entry<Integer, Object> contents = params.next(); statement.setNString(contents.getKey(), (String) contents.getValue()); System.out.println("Key: " + contents.getKey() + "Value: " + contents.getValue()); } statement.execute(); statement.close(); }
看來prepareCall方法返回OracleCallableStatementWrapper對象。
OracleCallableStatementWrapper statement = (OracleCallableStatementWrapper) initiateDBConnection().prepareCall(procedureName);
另外,您可以嘗試使用JAVA JDBC API ,如下所示:
CallableStatement statement = (CallableStatement) initiateDBConnection()
.prepareCall(procedureName);
我在您的WSJdbcConnection
注意到了這意味着您正在使用Websphere。 如果確實如此,並且如果您確實需要使用特定於Oracle的類( OracleConnection
等),那么我建議您研究一下由Websphere提供的WSCallHelper
類,以對這種情況進行“干凈”管理。 它提供了兩個主要方法jdbcCall
和jdbcPass
,分別用於調用本機類型和傳遞本機類型。
可從IBM獲得本文中的更多信息: http : //www-01.ibm.com/support/docview.wss? uid= swg21409335
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.