我收到以下异常:
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 类显示了一个错误:
public class DelegatingStatement extends AbandonedTrace implements Statement {
org.apache.commons.dbcp.DelegatingStatement 不是抽象的,不会覆盖 java.sql.Statement 中的抽象方法 isPoolable()
我不明白为什么会这样。
最佳答案
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
包。
关于java - 如何解决此 "cannot be cast to"异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31379629/