0

CallableStatementtoのキャストに問題がありOracleCallableStatementます。それはClassCastExceptionこのようになります:

java.lang.ClassCastException:
    oracle.jdbc.driver.OracleCallableStatementWrapper cannot be cast to
    oracle.jdbc.driver.OracleCallableStatement

そして、コードは次のとおりです。

Connection conn = qdbDataSource.getConnection();
PreparedStatement pstmt = null;
Connection conn2 = ((WLConnection)conn).getVendorConnection();
try {
    CallableStatement cs = conn2.prepareCall("{ ?=call asr.bsc(?,?,?,?,?,?,?)}");
    OracleCallableStatement ocs = (OracleCallableStatement)cs;
// (...)
}

spring jdbcテンプレートを使用しようとしましたが、結果は同じでした。

WebLogic 10.3.2を使用していますが、データソースのドライバクラスはデフォルトです。プロジェクトでもを使用してojdbc14.jarいますが、スタートアップクラスパスには含まれていません。

何か案は?

編集:これらはランタイムラッパークラスのサブクラスです:

weblogic.jdbc.wrapper.CallableStatement_oracle_jdbc_driver_OracleCallableStatementWrapper class
weblogic.jdbc.wrapper.CallableStatement class
weblogic.jdbc.wrapper.PreparedStatement class
weblogic.jdbc.wrapper.Statement class
weblogic.jdbc.wrapper.JDBCWrapperImpl class
weblogic.utils.wrapper.WrapperImpl class java.lang.Object
4

4 に答える 4

2

GetVendorConnection()の結果をOracleConnectionにキャストし、CallableStatementの代わりにOracleCallableStatementを使用します。

oracle.jdbc.OracleConnection conn2 = (oracle.jdbc.OracleConnection)(((WLConnection)conn).getVendorConnection());
于 2012-06-19T07:30:45.673 に答える
2

java.lang.ClassCastException:oracle.jdbc.driver.OracleCallableStatementWrapperをoracle.jdbc.driver.OracleCallableStatementにキャストできません

だから私は数週間前に一緒OracleCallableStatementに仕事をし、importでそれを解決しましたojdbc6.jar

したがって、このファイルをプロジェクトに追加するだけで、直接提供されOracleCallableStatementます

OraclePreparedStatement

必要なのはそれだけでimport oracle.jdbc.OracleCallableStatement;、それは機能します。

Connection con = null;
OracleCallableStatement cs = null;
try {
   con = OracleDAOFactory.getOracleDatabaseConnection();
   cs = (OracleCallableStatement) con.prepareCall(SOME_PROCEDURE);
   ...
}

これを見てください。

于 2012-06-20T08:32:08.543 に答える
0

見つけた。それは私のlibフォルダーの下にあるojdbcjarでした。weblogic.xmlで次のようなステートメントを使用しています。

優先-webinf-クラス

そしてこれは、そもそもweb-inf/libの下のjarファイルを使用することを提供します。そのため、そのフォルダの下にojdbc.jarが見つかった場合、それは私のアプリケーションには適合しますが、weblogic自体には適合しません。weblogicには独自のojdbcjarがあり、どういうわけか、OracleCallableStatementクラスを拡張して独自のojdbcjarからラップします。別のojdbcjarがあるため、実行時に、jarのOracleCallableStatementにキャストできませんでした。web-inf / libの下にあるjarを削除し、jdbc接続とステートメントパーツに関する責任をweblogicに与えたところ、機能しました。

ありがとうフェラス

于 2012-06-20T13:23:30.157 に答える
-1

最善の解決策を示します。1つのアプローチはweblogic.xml<wls:prefer-web-inf-classes>false</ wls:prefer-web-inf-classes >で使用することです。inの代わりにtrueが必要な場合は、libフォルダーのojdbcXX.jarを削除することもできます。プログラムのコンパイル中に、クラスパスで任意のojdbcXX.jarを使用できます。ただし、デプロイ中にojdbcXX.jarをlibから削除します。そのため、weblogicアプリケーションサーバーは独自のojdbcを使用し、エラーなしで正常に実行されます。falseweb-inf-classes

于 2015-06-04T05:47:23.863 に答える