我如何解决这个"不能被施放"的例外?

Cha*_*ant 5 java casting classcastexception

我收到以下异常:

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)
Run Code Online (Sandbox Code Playgroud)

代码行是这样的:

 serial = ((com.informix.jdbc.IfmxStatement) ((org.apache.tomcat.dbcp.dbcp.DelegatingStatement) statement).getDelegate()).getSerial();
Run Code Online (Sandbox Code Playgroud)

完整的功能是这样的:

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;
}
Run Code Online (Sandbox Code Playgroud)

这是神秘的,因为相同的代码在Unix SCO5服务器上部署时工作正常但在Linux Red Hat服务器上有错误.

任何帮助深表感谢.

谢谢.


深入研究一下,我看到DelegatingStatement类显示错误:

public class DelegatingStatement扩展AbandonedTrace实现Statement {

org.apache.commons.dbcp.DelegatingStatement不是抽象的,不会覆盖java.sql.Statement中的抽象方法isPoolable()

我不明白为什么会这样.

und*_*dog 3

java.lang.ClassCastException:org.apache.commons.dbcp.DelegatingStatement 无法转换为 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包应该导入。

还要检查这个这个