2011-12-24 3 views
0

Voici mon code Java pour appeler la procédure stockée. Je continue à obtenir une erreur en disant: java.lang.ClassCastException: oracle.jdbc.driver.OracleCallableStatementWrapper incompatible avec oracle.jdbc.OracleCallableStatementAppelez la procédure Oracle stockée à partir de 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(); 
} 

Répondre

0

Il apparaît l'objet retour de la méthode prepareCall OracleCallableStatementWrapper.

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

En outre, vous pouvez essayer avec JAVA JDBC API comme suit:

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

Apparemment, c'est ce que j'ai essayé au début, mais je continue à obtenir l'erreur de jeton non SQL92 compatible – Bytekoder

+0

pourrait être un problème avec votre syntaxe ou pilote JDBC ne prend pas en charge cette syntaxe . – nayakam

0

Je l'ai remarqué dans votre cose WSJdbcConnection ce qui signifie que vous utilisez Websphere. Si c'est vraiment le cas, et si vous avez vraiment besoin d'utiliser Oracle clasess (OracleConnection, etc), je suggère que vous devriez regarder dans la classe WSCallHelper, fourni par websphere pour la gestion «propre» de ce genre de situation. Il fournit deux méthodes principales, jdbcCall et jdbcPass pour appeler des méthodes sur et passer des types natifs respectivement.

Plus d'informations sont disponibles dans cet article d'IBM: http://www-01.ibm.com/support/docview.wss?uid=swg21409335

Questions connexes