2011-12-24 5 views
0

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

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(); 
} 

ответ

0

Он появляется объект prepareCall метод возврата OracleCallableStatementWrapper.

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

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

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

Судя по всему, вот что я пытался в первый, но я получаю SQL92 маркер не совместим ошибка – Bytekoder

+0

Может быть проблема с синтаксисом или драйвер JDBC не поддерживает этот синтаксис , – nayakam

0

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

Более подробная информация доступна в этой статье от IBM: http://www-01.ibm.com/support/docview.wss?uid=swg21409335

Смежные вопросы