在讀取oracle資料庫中的大欄位blob欄位時,
oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob(1);
發生java.lang.ClassCastException: oracle.sql.CLOB 異常
異常資訊:
java.lang.ClassCastException: oracle.sql.BLOB
at mdx.DB.updateClob(DB.java:116)
at org.apache.jsp.processEditBidItem_jsp._jspService(org.apache.jsp.processEditBidItem_jsp:174)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:319)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:868)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:663)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
剛開始都以為真的是類型轉換異常,後面加了一句列印轉換前的類型
System.out.println(rs.getBlob(1).getClasss());
列印出來的結果是oracle.sql.BLOB,
後面又懷疑是驅動包的問題,把原來的class12.jar的驅動包換成了oracle10.2.0.1版本的驅動包ojdbc14.jar,
也沒有解決問題
問題解決方案:
最後覺得是不是驅動包重複了,
就在tomcat的common/lib目錄下面找到相應的驅動包,而應用程式中也有相應的驅動包,只能刪除其中一個來試,
因為common/lib/目錄下面的驅動包是給tomcat建立jndi資料來源時用的,故不能刪除,只能刪除應用程式中的包,但刪除後又會導致程式編譯不通過,這時就通過eclilpse的-build path進行外部參考,使用應用程式編譯通過,但也不會把ojdbc14.jar的驅動包引入到發布目錄,再試,果然解決了問題。
本文轉自:http://blog.javauu.com/2009/03/235.html