Veröffentlicht 19. Oktober 200519 j 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 ?
19. Oktober 200519 j 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 ?
19. Oktober 200519 j dein Objekt rset ist doch ein OracleResultSet, oder ?!? Warum dann der Cast in Zeile 4 ? Ausserdem castest Du da in die falsche Richtung
19. Oktober 200519 j 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 ?
19. Oktober 200519 j 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 ?!?
19. Oktober 200519 j 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?
20. Oktober 200519 j 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
20. Oktober 200519 j Du castest auf OracleResultSet und hast aber ein WSJdbcResultSet zurückbekommen. Verwendest Du den richtigen JDBC-Treiber? Peter
20. Oktober 200519 j 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
20. Oktober 200519 j Autor So hab jetzt noch mal den direkten JDBC aufruf gemacht. Das erzeugte folgende Ausgabe ResultSet implementation: oracle.jdbc.driver.OracleResultSetImpl
20. Oktober 200519 j @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.