Zum Inhalt springen

Fehler beim Casten auf OracleResultSet


Empfohlene Beiträge

Geschrieben

Hallo,

ich habe eine OracleDatasource eingerichtet. Auf die kann ich auch ganz normal zugreifen. Wenn ich allerdings versuche mit folgendem Code

BLOB blob;

rset = (OracleResultSet) stmt.executeQuery(						"select * from tbl_anhang where anhang_id="				+ ianhang_id							+ " FOR UPDATE");

rset.next();

blob = ((OracleResultSet) rset).getBLOB("anhang");


ein OracleResultSet zu bekomme kommt es zu einer Exception.

Dieser Code funktionierte aber noch als ich einen direkten JDBC aufruf gemacht habe.

Kann mir jemand sagen wie ich den Code auch mit einer DataSource ans laufen kriege ?

Geschrieben

was für eine Exception ? Meldung / Stacktrace ?

was für ein Objekt (also von welcher Klasse) kommt denn von excecuteQuery() zurück ? .. lässt sich das überhaupt in ein ResultSet Casten ?

Geschrieben

Sorry für den Code oben. War ein C&P Fehler also nochmal


stmt = c.createStatement();

BLOB blob;

rset = stmt.executeQuery("select * from tbl_anhang where anhang_id="

                                   + ianhang_id + " FOR UPDATE");

rset.next();

blob = ((OracleResultSet) rset).getBLOB("anhang");

So executeQuery gibt ein Resultset zurück. Ich brauche aber um den Oracle BLOB benutzen zu können ein OracleResultSet.

Die Exception die geworfen wird ist eine ClassCastException.

@zirri Wieso caste ich in die falsche Richtung ? Mit dem direkten JDBC Aufruf funktionierte es doch auch ?

Geschrieben

Ich brauche aber um den Oracle BLOB benutzen zu können ein OracleResultSet.

Die Exception die geworfen wird ist eine ClassCastException.

Warum brauchst Du denn zwingend ein OracleResultSet ?!?

Geschrieben
Die Exception die geworfen wird ist eine ClassCastException.
Posten!

Mit Stacktrace!

Und dem Quelltextausschnitt, der sie verursacht hat!

Nur so lässt sich wirklich feststellen, wo die Ursache liegt.

Probier doch zum Debuggen mal folgendes:


stmt = c.createStatement();

rset = stmt.executeQuery("select * from tbl_anhang where anhang_id=" + ianhang_id + " FOR UPDATE");

System.out.println("ResultSet implementation: " + rset.getClass().getName());

Was kommt raus?

Geschrieben

So also hier erstmal die Exception

[20.10.05 08:41:05:847 CEST] 183d8e93 SystemErr     R java.lang.ClassCastException: com.ibm.ws.rsadapter.jdbc.WSJdbcResultSet

[20.10.05 08:41:05:847 CEST] 183d8e93 SystemErr     R 	at de.ticket.basis.commands.BeanstandungAnlegenCmd.erstelleAnhang(BeanstandungAnlegenCmd.java:224)

[20.10.05 08:41:05:847 CEST] 183d8e93 SystemErr     R 	at de.ticket.basis.commands.BeanstandungAnlegenCmd.erstelleBeanstandung(BeanstandungAnlegenCmd.java:138)

[20.10.05 08:41:05:847 CEST] 183d8e93 SystemErr     R 	at de.ticket.basis.commands.BeanstandungAnlegenCmd.execute(BeanstandungAnlegenCmd.java:67)

[20.10.05 08:41:05:847 CEST] 183d8e93 SystemErr     R 	at de.ticket.process.beanstandung.BeanstandungServiceBean.anlegen(BeanstandungServiceBean.java:43)

[20.10.05 08:41:05:847 CEST] 183d8e93 SystemErr     R 	at de.ticket.process.beanstandung.EJSRemoteStatelessBeanstandungService_091a54ea.anlegen(EJSRemoteStatelessBeanstandungService_091a54ea.java:53)

[20.10.05 08:41:05:847 CEST] 183d8e93 SystemErr     R 	at de.ticket.process.beanstandung._BeanstandungServiceRemote_Stub.anlegen(_BeanstandungServiceRemote_Stub.java:263)

[20.10.05 08:41:05:857 CEST] 183d8e93 SystemErr     R 	at de.ticket.client.beanstandung.BeanstandungServiceDel.anlegen(BeanstandungServiceDel.java:52)

[20.10.05 08:41:05:857 CEST] 183d8e93 SystemErr     R 	at de.ticket.ticketweb.actions.BeanstandungsAction.execute(BeanstandungsAction.java:255)

[20.10.05 08:41:05:857 CEST] 183d8e93 SystemErr     R 	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)

[20.10.05 08:41:05:857 CEST] 183d8e93 SystemErr     R 	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)

[20.10.05 08:41:05:857 CEST] 183d8e93 SystemErr     R 	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)

[20.10.05 08:41:05:857 CEST] 183d8e93 SystemErr     R 	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)

[20.10.05 08:41:05:857 CEST] 183d8e93 SystemErr     R 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)

[20.10.05 08:41:05:867 CEST] 183d8e93 SystemErr     R 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

[20.10.05 08:41:05:867 CEST] 183d8e93 SystemErr     R 	at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)

[20.10.05 08:41:05:867 CEST] 183d8e93 SystemErr     R 	at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)

[20.10.05 08:41:05:867 CEST] 183d8e93 SystemErr     R 	at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)

[20.10.05 08:41:05:867 CEST] 183d8e93 SystemErr     R 	at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)

[20.10.05 08:41:05:867 CEST] 183d8e93 SystemErr     R 	at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)

[20.10.05 08:41:05:867 CEST] 183d8e93 SystemErr     R 	at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)

[20.10.05 08:41:05:867 CEST] 183d8e93 SystemErr     R 	at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)

[20.10.05 08:41:05:867 CEST] 183d8e93 SystemErr     R 	at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:948)

[20.10.05 08:41:05:867 CEST] 183d8e93 SystemErr     R 	at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:530)

[20.10.05 08:41:05:867 CEST] 183d8e93 SystemErr     R 	at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:176)

[20.10.05 08:41:05:867 CEST] 183d8e93 SystemErr     R 	at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:79)

[20.10.05 08:41:05:877 CEST] 183d8e93 SystemErr     R 	at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:201)

[20.10.05 08:41:05:877 CEST] 183d8e93 SystemErr     R 	at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)

[20.10.05 08:41:05:877 CEST] 183d8e93 SystemErr     R 	at com.ibm.ws.webcontainer.cache.invocation.CacheableInvocationContext.invoke(CacheableInvocationContext.java:114)

[20.10.05 08:41:05:877 CEST] 183d8e93 SystemErr     R 	at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:186)

[20.10.05 08:41:05:877 CEST] 183d8e93 SystemErr     R 	at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)

[20.10.05 08:41:05:877 CEST] 183d8e93 SystemErr     R 	at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)

[20.10.05 08:41:05:877 CEST] 183d8e93 SystemErr     R 	at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:610)

[20.10.05 08:41:05:877 CEST] 183d8e93 SystemErr     R 	at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:435)

[20.10.05 08:41:05:877 CEST] 183d8e93 SystemErr     R 	at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:593)

Verursachender Aufruf

blob = ((OracleResultSet) rset).getBLOB("anhang");

@Perdi bei deiner Zeile kommt

ResultSet implementation: com.ibm.ws.rsadapter.jdbc.WSJdbcResultSet

@Zirri Ich brauche das OracleResultSet weil ich aus dem Oracle BLOB einen BinaryOutputStream bekommen kann und damit den Anhang in die Datenbank speichern kann. Der normale SQL Blob bietet diese Methode nicht an

Geschrieben

Ich habe in der DataSource folgenden JDBC Provider ausgewählt

oracle.jdbc.pool.OracleConnectionPoolDataSource

Im Classpath hab ich den gleichen Eintrag genommen der auch beim direkten JDBC Aufruf funktionierte also classes12.zip

Geschrieben

@Perdi bei deiner Zeile kommt

ResultSet implementation: com.ibm.ws.rsadapter.jdbc.WSJdbcResultSet

Dann hast du doch den Fehler gefunden.

Ein WSJdbcResultSet ist eben kein OracleResultSet. So wie es aussieht wrappt der WebSphere Application Server den JDBC Zugriff nochmal. Wie auch immer, die Exception ist schon "richtig" an der Stelle. Du wirst also entweder manuell den Oracle Treiber verwenden, oder aber den BLOB Zugriff anders lösen müssen.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...