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

我正在尝试使用数据源将我的Servlet连接到mysql数据库。 但每当我运行我的servlet时,我最终会得到这个exception:

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) 

这是我的Content.xml

  

这是我的web.xml

   DB Connection jdbc/abdultayyebs javax.sql.DataSource Container 

这是我的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); } } 

我还在tomcat的lib文件夹中添加了mysql jdbc驱动程序,但即使这样也没有帮助? 如果有人可以帮助我,那将是非常值得注意的

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

这意味着MySQL JDBC驱动程序已过时,因此它不支持Java 1.6的Connection#isValid()方法。

升级它 。 并确保在运行时类路径中只有一个MySQL JDBC驱动程序JAR文件。

也可以看看:

  • 将Java连接到MySQL数据库

对我来说,解决方案不是升级我的驱动程序(JT400)。 即使最新版本(9.1)似乎没有实现isValid()(它在代码中被注释掉了吗?)。

对我有用的是为我的数据库连接池提供validationQuery。 例如:

 validationQuery=SELECT current date FROM sysibm.sysdummy1 

在我的情况下,我将ojdbc从版本14升级到6.我有工件ojdbc14,然后我将其更改为ojdbc6。 我在这里失去了一段时间,因为我认为14是14> 6的更高版本。 但14适用于java 1.4。 6表示java6

net.sourceforge.jtds.jdbc.JtdsConnection未实现isValid()

因此,您需要指定连接测试查询以确保未调用isValid()方法isValid()下行添加到application.properties文件中为我解决了错误。

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