2015-07-13 32 views
3

我得到以下異常:我該如何解決「不能投射」異常?

java.lang.ClassCastException: org.apache.commons.dbcp.DelegatingStatement cannot be cast to org.apache.tomcat.dbcp.dbcp.DelegatingStatement 
    optimise.database.ProdigyDB.doInsertSerial(ProdigyDB.java:139) 
    optimise.stock.CurrentRequest.writeRequest(CurrentRequest.java:145) 
    optimise.stock.SubmitOrderServlet.processRequest(SubmitOrderServlet.java:51) 
    optimise.stock.SubmitOrderServlet.doPost(SubmitOrderServlet.java:188) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
    optimise.stock.AuthFilter.doFilter(AuthFilter.java:69) 

的代碼行是這樣的:

serial = ((com.informix.jdbc.IfmxStatement) ((org.apache.tomcat.dbcp.dbcp.DelegatingStatement) statement).getDelegate()).getSerial(); 

完整的功能是這樣的:

public static int doInsertSerial(String sql) { 
    int serial = 0; 

    try { 
     Connection connection = getConnection(); 
     java.sql.Statement statement = connection.createStatement(); 
     statement.executeUpdate(sql); 

     serial = ((com.informix.jdbc.IfmxStatement)((org.apache.tomcat.dbcp.dbcp.DelegatingStatement) statement).getDelegate()).getSerial(); 

     statement.close(); 
     connection.close(); 
    } catch (SQLException e) { 
     throw new RuntimeException("SQL Update Exception\n" + sql, e);     
    } 

    return serial; 
} 

這是神祕的,因爲相同的代碼在Unix SCO5服務器上部署時工作良好,但在Linux Red Hat服務器上出現錯誤。

任何幫助,非常感謝。

謝謝。


展望事情深一點,我看到DelegatingStatement類顯示錯誤:

公共類DelegatingStatement擴展AbandonedTrace實現聲明{

org.apache.commons.dbcp.DelegatingStatement是不抽象和不重寫抽象方法isPoolable()在java.sql.Statement

我不明白爲什麼會發生這種情況。

回答

3

java.lang.ClassCastException: org.apache.commons.dbcp.DelegatingStatement cannot be cast to org.apache.tomcat.dbcp.dbcp.DelegatingStatement

DelegatingStatement類的包不同。 org.apache.commons.dbcp & org.apache.tomcat.dbcp.dbcp是兩個不同的包,提供兩個不同的DelegatingStatement類。你會得到一個ClassCastException,因爲JVM根本看不到它們是同一類型的。

檢查導入的DelegatingStatement類包。根據代碼 org.apache.tomcat.dbcp.dbcp包應該導入。

還要檢查this & this

+0

感謝您的意見。 –

+0

或者如果你有更多時間,可以閱讀[here](http://javarevisited.blogspot.co.id/2012/12/how-to-solve-javalangclasscastexception-java.html#axzz50SF9zzij) –

相關問題