Вызов хранимой процедуры Oracle из Java - PullRequest
0 голосов
/ 24 декабря 2011

Вот мой Java-код для вызова хранимой процедуры.Я получаю сообщение об ошибке: java.lang.ClassCastException: oracle.jdbc.driver.OracleCallableStatementWrapper несовместим с oracle.jdbc.OracleCallableStatement

</p> <pre><code>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(); }

Ответы [ 2 ]

0 голосов
/ 24 декабря 2011

Я заметил в вашей шкуре WSJdbcConnection, что означает, что вы используете Websphere.Если это действительно так, и если вам действительно нужно использовать специфический для Oracle оператор (OracleConnection и т. Д.), Я бы посоветовал вам обратиться к классу WSCallHelper, предоставленному Websphere для «чистого» управления такого родаситуации.Он предоставляет два основных метода, jdbcCall и jdbcPass для вызова методов и передачи собственных типов соответственно.

Дополнительная информация доступна в этой статье от IBM: http://www -01.ibm.ком / поддержка / docview.wss? UID = swg21409335

0 голосов
/ 24 декабря 2011

Похоже, что prepareCall возвращает объект OracleCallableStatementWrapper.

OracleCallableStatementWrapper statement = (OracleCallableStatementWrapper) initiateDBConnection().prepareCall(procedureName);

Кроме того, вы можете попробовать с JAVA API JAVA следующим образом:

CallableStatement statement = (CallableStatement) initiateDBConnection()
            .prepareCall(procedureName);
...