oracle.jdbc.OracleCallableStatement cast exception
Ich habe ein problem, über das Gießen einer CallableStatement
zu OracleCallableStatement
. Es gibt ClassCastException
wie diese:
java.lang.ClassCastException:
oracle.jdbc.driver.OracleCallableStatementWrapper cannot be cast to
oracle.jdbc.driver.OracleCallableStatement
Und der code ist:
Connection conn = qdbDataSource.getConnection();
PreparedStatement pstmt = null;
Connection conn2 = ((WLConnection)conn).getVendorConnection();
try {
CallableStatement cs = conn2.prepareCall("{ ?=call asr.bsc(?,?,?,?,?,?,?)}");
OracleCallableStatement ocs = (OracleCallableStatement)cs;
//(...)
}
Ich versuche mit spring jdbc template, aber Ergebnis war das gleiche.
Ich bin mithilfe von WebLogic 10.3.2, und der Fahrer Klasse der datasource ist Standard ein. Ich bin auch mit der ojdbc14.jar
in meinem Projekt, das startup classpath enthält es nicht.
Irgendwelche Ideen?
BEARBEITEN: Dies sind die Unterklassen des runtime-wrapper-Klasse:
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
- was ist die oracle-version und warum brauchen Sie, um Sie zu wirken !!!! ich denke, Sie brauche es nicht (die cast) können Sie es vermeiden, meine ich
- Ich bin mit den Komponenten, die für oracle-db. Die Funktion, die ich bin versucht zu rufen, ist voll davon. So brauche ich Oracle CallableStatement. Ich denke, dass die oracle-version ist nicht so wichtig hier, denn ich bin nicht immer die Fehler, wenn Sie versuchen, sich zu verbinden, aber immer die callablestatement.
- er will es benutzen, weil OracleCallableStatement bietet mehr Methoden und komplexer ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Besetzung Ergebnis getVendorConnection (), um OracleConnection, als Sie mit OracleCallableStatement statt CallableStatement
Also arbeite ich vor einigen Wochen mit
OracleCallableStatement
ist, und ich löste es mit importojdbc6.jar
.So dass Sie nur zu Ihrem Projekt hinzufügen dieser Datei und bietet direkt
OracleCallableStatement
,OraclePreparedStatement
etc..Alle was Sie brauchen, ist
import oracle.jdbc.OracleCallableStatement;
- und es funktioniert.Haben Blick auf diese.
Habe ich es gefunden. Es war die ojdbc Glas unter meinen lib-Ordner. Ich bin mit einer Anweisung in weblogic.xml wie:
bevorzugen-webinf-Klassen
Ist, und dies stellt die Verwendung der jar-files unter web-inf/lib in den ersten Platz. Also, wenn es findet eine ojdbc.jar unter diesem Ordner, es passt einfach für meine Anwendung, aber nicht für weblogic selbst. Da weblogic hat seine eigene ojdbc Glas unter ihm und irgendwie ist es, nur erstreckt sich die OracleCallableStatement Klasse zu Wickeln, Sie von Ihrer eigenen ojdbc jar. Da habe ich eine eigene ojdbc jar zur Laufzeit, könnte es nicht, werfe es mein Glas ist OracleCallableStatement. Wenn ich entfernte das Glas unter web-inf/lib und gab die Verantwortung über die jdbc-verbindungen und Aussagen Teile weblogic, es funktionierte.
Dank fellas
Gebe ich die beste Lösung, ein Ansatz ist die Nutzung von
<wls:prefer-web-inf-classes>false</wls:prefer-web-inf-classes >
im weblogic.xml.Wenn Sie wollen true anstelle von
false
imweb-inf-classes
dann ein anderer Ansatz ist, entfernen Sie ojdbcXX.jar in den lib-Ordner. Beim kompilieren Programm, das Sie verwenden können, jede ojdbcXX.jar im classpath. Aber während die Bereitstellung entfernen ojdbcXX.jar aus lib. So, dass weblogic application server seinen eigenen ojdbc und es wird erfolgreich ausgeführt, ohne Fehler.