当前位置: 首页 > 知识库问答 >
问题:

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

阎智
2023-03-14

我试图使用数据源将Servlet连接到mysql数据库。但每当我运行Servlet时,我都会遇到以下异常:

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

<Resource name="jdbc/abdultayyebs" auth="Container"
          type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql://127.0.0.1:4000/abdultayyebs?zeroDateTimeBehavior=convertToNull"
          username="root" password="february1996" maxActive="5" maxIdle="2"
          maxWait="1000"/>

这是我的web.xml

  <resource-ref>
  <description>DB Connection</description>
  <res-ref-name>jdbc/abdultayyebs</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth></resource-ref>

这是我的仆人阿卜杜勒塔耶布斯

 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驱动程序,但即使这样也没有帮助?如果有人能帮助我,那将是非常可观的

共有3个答案

范轶
2023-03-14

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

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

spring.datasource.hikari.connection-test-query=SELECT 1
宣望
2023-03-14

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

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

validationQuery=SELECT current date FROM sysibm.sysdummy1
法景明
2023-03-14

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

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

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

    < li >将Java连接到MySQL数据库
 类似资料:
  • 问题内容: 在javascript中,我看到过在很多情况下都使用过它,并且我知道它会为前面的值添加一个: 但是当我这样做时会发生什么: 并且使用运算符有什么不同(当然,它是减法而不是加法)? 问题答案: 和之间的区别是表达式的值。 该值是增量之前的值。的值是增量后的值。 例: 在与运营商的工作方式相同。

  • 问题内容: 哪个更正确?Java的结果为12或C =13。或者,如果不是正确性,请详细说明。 问题答案: 没有比这更正确的了。它实际上是未定义的,称为序列点错误。 http://en.wikipedia.org/wiki/Sequence_point

  • 问题内容: 以下Java程序平均需要0.50秒至0.55秒的时间运行: 如果我替换为,则需要0.60到0.65秒的时间来运行。怎么会? 我对该程序的每个版本运行了15次,两次交替运行。结果如下: 最快的运行时间比最慢的运行时间长。如果它们具有相同的效率,则发生这种情况的可能性将小于。 问题答案: 字节码的顺序略有不同。 : vs : 乍看之下,这没有什么区别;如果有的话,第二个版本更理想,因为它减

  • 问题内容: 我正在尝试使用数据源将Servlet连接到mysql数据库。但是,每当我运行我的servlet时,我最终都会收到此异常: 这是我的Content.xml 这是我的web.xml 这是我的servlet AbdulTayyebs 我还在tomcat的lib文件夹中添加了mysql jdbc驱动程序,但是即使这样也没有帮助?如果有人可以帮助我,那将是非常感谢的 问题答案: java.lan

  • 我想做到这一点: 我该怎么做?我想在那里得到变量名,但它将是不起作用的东西(字符串整数)的组合,而不是变量名

  • 问题内容: 我在一个开始从事的项目中遇到了这段代码。原始开发人员不再可用,我对此一无所知: 产生值为。这是如何运作的? 什么是运算符? 什么是运算符? 什么是运算符? 什么是运算符? 问题答案: 什么是运算符? 那是两个运算符,一个是赋值运算符,一个是一元加号,它什么都不做。 您是否输入错了并表示compund赋值运算符? 什么是运算符? 还有两个运算符,一个为后递增,一个为加法(根据最大划分规则