java.lang.AbstractMethodError: com.mysql.jdbc.Connection.isValid (I) Z

Eu estou tentando conectar meu Servlet ao database mysql usando a fonte de dados. Mas sempre que executo meu servlet, acabo recebendo essa exceção:

java.lang.AbstractMethodError: com.mysql.jdbc.Connection.isValid(I)Z org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.isValid(DelegatingConnection.java:913) org.apache.tomcat.dbcp.dbcp2.PoolableConnection.validate(PoolableConnection.java:282) org.apache.tomcat.dbcp.dbcp2.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:356) org.apache.tomcat.dbcp.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:2306) org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2289) org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2038) org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1532) Servlet.AbdulTayyebs.processRequest(AbdulTayyebs.java:36) Servlet.AbdulTayyebs.doGet(AbdulTayyebs.java:57) javax.servlet.http.HttpServlet.service(HttpServlet.java:622) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

Aqui está o meu Content.xml

  

Aqui está o meu web.xml

   DB Connection jdbc/abdultayyebs javax.sql.DataSource Container 

E aqui está meu servlet AbdulTayyebs

  import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.SQLException; import javax.naming.Context; import javax.naming.InitialContext; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; public class AbdulTayyebs extends HttpServlet { DataSource ds=null; @Override public void init(ServletConfig config)throws ServletException{ try { Context initContext = new InitialContext(); Context envContext = (Context)initContext.lookup("java:/comp/env"); ds = (DataSource)envContext.lookup("jdbc/abdultayyebs"); } catch (Exception e) { throw new ServletException("Something went wrong while Initializing the Servlet",e); } } protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { PrintWriter write = response.getWriter(); try { Others.Action a = Others.ActionFactory.CreateAction(request); try(Connection c=ds.getConnection()){ String page = a.Execute(c,request,request.getSession(false)); request.getRequestDispatcher(page).forward(request, response); } } catch (SQLException e) { write.println(e); } catch (ServletException e) { write.println(e); } catch (Exception e) { write.println(e); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } } 

Eu também adicionei o driver mysql jdbc na pasta lib do tomcat mas mesmo isso não ajudou? Seria muito apreciável se alguém pudesse me ajudar

java.lang.AbstractMethodError: com.mysql.jdbc.Connection.isValid (I) Z

Isso significa que o driver JDBC do MySQL está desatualizado e não suporta o método Connection#isValid() Java 1.6.

Atualize-o . E certifique-se de que você tenha apenas um arquivo JAR do driver JDBC do MySQL no classpath de tempo de execução.

Veja também:

  • Conecte o Java a um database MySQL

Para mim, a solução não foi atualizar meu driver (JT400). Mesmo a versão mais recente (9.1) parece não ter implementado isValid () (é comentado no código?).

O que funcionou para mim foi fornecer uma consulta de validação para o meu pool de conexão de database. Por exemplo:

 validationQuery=SELECT current date FROM sysibm.sysdummy1 

no meu caso, eu atualizei ojdbc da versão 14 para 6. Eu tinha ojdbc14 de artefato, então mudei para ojdbc6. Eu perdi bastante em algum momento aqui, pois achei que 14 é uma versão posterior como 14> 6. mas 14 é para o java 1.4. 6 significa java6

net.sourceforge.jtds.jdbc.JtdsConnection não implementa isValid()

Portanto, você precisa especificar uma conexão-teste-consulta para garantir que o método isValid() não seja chamado. A isValid() da seguinte linha no arquivo application.properties resolveu o erro para mim.

 spring.datasource.hikari.connection-test-query=SELECT 1 
Intereting Posts