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