Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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 ?

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 ?

dein Objekt rset ist doch ein OracleResultSet, oder ?!?

Warum dann der Cast in Zeile 4 ?

Ausserdem castest Du da in die falsche Richtung

  • Autor

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 ?

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 ?!?

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?

  • Autor

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

Du castest auf OracleResultSet und hast aber ein WSJdbcResultSet zurückbekommen. Verwendest Du den richtigen JDBC-Treiber?

Peter

  • Autor

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

@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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.