2015-07-13 2 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, но ошибки на сервере Red Hat Linux.

Любая помощь очень ценится.

Спасибо.


Глядя на вещи немного глубже, я вижу, что класс DelegatingStatement показывает ошибку:

общественный класс DelegatingStatement расширяет AbandonedTrace реализует Statement {

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

или если у вас больше времени, вы можете прочитать [здесь] (http://javarevisited.blogspot.co.id/2012/12/how-to-solve-javalangclasscastexception-java.html#axzz50SF9zzij) –

Смежные вопросы