2016-04-07 20 views
1

次のコードは、例外がスローされます:Oracle JDBCのCallableStatement getParameterMetaData()。getParameterType()の代替手段は何ですか?

CallableStatement cs = ... 
cs.getParameterMetaData().getParameterType(columnIndex); 

Caused by: java.sql.SQLException: Unsupported feature 
    at oracle.jdbc.driver.OracleParameterMetaData.getParameterType(OracleParameterMetaData.java:166) 
    ... 26 more 

パラメータの型を取得する別の方法は何ですか?

+0

なぜパラメータタイプを知る必要があるのですか(動的な方法でも)?文を呼び出す前に型を変換するのですか?もしそうなら、あなたは 'setObject'でそれを呼び出そうとすることができ、それがOracle自身で変換できることを願っています。 – Thilo

+1

私たちは、すべてのパラメータからResultSetを検出し、何かを実行して返すユーティリティを構築しています。それが設定されている場所は先読みされていません。 – supertonsky

+0

最終的にResultSetになるOUTパラメータを意味しますか?オラクルはそれをしていますか?それはREFCURSORでしょうか? – Thilo

答えて

3

誰かがこれに対してより良い回答を提供できる場合は、私はあなたの同意を受けます。だからここに私自身の質問に対する答えがあります。

CallableStatement cs = ... 
for(int i = 1; i <= cs.getParameterMetaData().getParameterCount(); i++) { 
    try { 
     // because cs.getParameterMetaData().getParameterType(i) is not supported by ojdbc, we let this throw SQLException 
     Object o = cs.getObject(i); 
     if(o instanceof ResultSet) { 
      rs = (ResultSet)o; 
     } 
    } catch(SQLException sqle) { 
     continue; 
    } 
} 

私の質問には正確には答えられませんが、私の問題は部分的に解決します。

関連する問題