簡體   English   中英

從Java調用Oracle存儲過程

[英]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類,以對這種情況進行“干凈”管理。 它提供了兩個主要方法jdbcCalljdbcPass ,分別用於調用本機類型和傳遞本機類型。

可從IBM獲得本文中的更多信息: http : //www-01.ibm.com/support/docview.wss? uid= swg21409335

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM