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

通过连接池建立MySQL JDBC连接失败:SQL异常:未找到合适的驱动程序

孙星鹏
2023-03-14

我不知道这个代码有什么问题?它抛出一个SQL异常:没有找到适合jdbc的驱动程序:mysql://localhost:3306/test.

但是我已经包含了jar文件mysql-connector-java-5.0.8-bin.jar

我试图通过数据源通过连接池获得连接。

我希望有人能帮我解决这个问题。

请忽略如果有任何日志错误我希望有人来解决连接错误已突出显示在上面

import java.sql.*;

import javax.annotation.Resource;
import javax.naming.*;
import javax.sql.*;

import org.apache.tomcat.dbcp.dbcp.ConnectionFactory;
import org.apache.tomcat.dbcp.dbcp.DriverManagerConnectionFactory;
import org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory;
import org.apache.tomcat.dbcp.dbcp.PoolingDataSource;
import org.apache.tomcat.dbcp.pool.impl.GenericObjectPool;

public class GetConnection {
    /** Uses JNDI and Datasource (preferred style). */

    @Resource(name = "jdbc/test")
    DataSource ds;
    static final String DRIVER = "com.mysql.jdbc.Driver";
    static final String DATASOURCE_CONTEXT = "java:comp/env/jdbc/test";
    private GenericObjectPool connectionPool = null;
    public static final String URL = "jdbc:mysql://localhost:3306/test";
    public static final String USERNAME = "root";
    public static final String PASSWORD = "secret_password";

    public GetConnection() {
        System.out.println("enteredin to the new get connection");
        /*try {
            Context context = new InitialContext();
            ds = (DataSource) context.lookup(DATASOURCE_CONTEXT);
        } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }*/
        try {
            ds = setUp();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }


    public DataSource setUp() throws Exception {
        Class.forName(GetConnection.DRIVER).newInstance();
        connectionPool = new GenericObjectPool();
        connectionPool.setMaxActive(10);
        ConnectionFactory cf = new DriverManagerConnectionFactory(
                GetConnection.URL, GetConnection.USERNAME,
                GetConnection.PASSWORD);
        PoolableConnectionFactory pcf = new PoolableConnectionFactory(cf,
                connectionPool, null, null, false, true);
        return new PoolingDataSource(connectionPool);
    }

    public GenericObjectPool getConnectionPool() {
        return connectionPool;
    }

    /**
     * Sets up the dataSource for the connection
     */

    /**
     * returns the connection object from the datasource
     * 
     * @return the connection object
     */
    public Connection getJNDIConnection() {
        System.out.println("entered in to the get jndi connection");
                    System.out.println(ds);
                    System.out.println("checking the ds value");
        Connection result = null;
        try {
            System.out.println("Inside try");
            /*Context initialContext = new InitialContext();
            this.ds = (DataSource) initialContext.lookup(DATASOURCE_CONTEXT);*/
            if (ds != null) {
                result = this.ds.getConnection();
                System.out.println("connection done");
            } else {
                log("Failed to lookup datasource.");
                System.out.println("connection not done");
            }
        } /*catch (NamingException ex) {
            ex.printStackTrace();
            System.out.println("naming excepti9on");
            log("Cannot get connection: " + ex);
        } */catch (SQLException ex) {
            ex.printStackTrace();
            System.out.println("sqlexception");
            log("Cannot get connection: " + ex);
        }
        return result;
    }

    private static void log(Object aObject) {
        System.out.println(aObject);
    }
}

项目的上下文文件如下所示

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource" username="root" password="secret_password" driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/test;create=true" />
</Context>

堆栈跟踪在下面

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/test
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at org.apache.tomcat.dbcp.dbcp.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:75)
    at org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
    at org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1158)
    at org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
    at com.new.connection.GetConnection.getJNDIConnection(GetConnection.java:81)
    at com.new.daoclass.CreateUserAgreement.createUser(CreateUserAgreement.java:17)
    at com.new.bean.useragreement.UserAgreementBean.createagreement(UserAgreementBean.java:70)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
    at org.apache.myfaces.view.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:83)
    at javax.faces.component._MethodExpressionToMethodBinding.invoke(_MethodExpressionToMethodBinding.java:88)
    at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:100)
    at javax.faces.component.UICommand.broadcast(UICommand.java:120)
    at javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:937)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:271)
    at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1249)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:675)
    at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:34)
    at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:171)
    at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

共有2个答案

况鸿雪
2023-03-14

您试图从Tomcat创建的池中访问数据库连接。因此Tomcat需要在自己的类路径中有JDBC驱动程序。将JDBC驱动程序添加到tomcat/lib目录。

田易安
2023-03-14

请将其放入${CATALINA_HOME}/lib目录并重新启动服务器。这是因为您试图从配置数据源期间tomcat应该创建的池访问连接。因此,它需要mysql驱动程序。jar来配置数据源。因此,通过将其放入tomcat/lib中,为其提供jar。你可以从这个链接下载。

 类似资料:
  • 我试图使用servlet实现连接池。我知道有很多类似的问题被问到,但没有一个能帮上忙。 以下是例外: 我在WEB-INF/lib文件夹中添加了jar文件。 下面是我的Servlet代码: 这是context.xml文件

  • 我试图将JavaEE应用程序部署到运行在ubuntu服务器上的payara服务器,但当应用程序运行时,会引发数据库异常。我想要注意的是,相同的配置和文件在我的本地windows机器上运行时没有任何问题。这里是一些关于我的配置的信息,如果任何其他的细节需要或错过请让我知道。 MySQL Server 5.7版 数据库异常 本地异常堆栈:异常[EclipseLink-4002](Eclipse Per

  • 我们发现SQL Server连接被删除,出现以下错误:com.microsoft.sqlserver.jdbc。SQLServerException:驱动程序无法使用安全套接字层(SSL)加密建立到SQL Server的安全连接。错误:“SQL Server返回了不完整的响应。连接已关闭。客户端连接ID:b928e7b0-689b-40f8-be3e-158261d0a84a”。 原因:com .

  • 问题内容: 我正在尝试使用PDO与Microsoft提供的驱动程序连接到现有的SQL Server数据库。 我看过使用odbc,dblib,mssql等的示例,但是我相信这些驱动程序的连接字符串应使用’sqlsrv’吗? 有没有很好的例子来说明如何正确地做到这一点?如果我应该通过其他方法进行此操作,请告诉我。谢谢! 问题答案: 那么,关于PDO的最好之处在于,访问任何数据库都非常容易。只要已经安装

  • 我正在尝试使用本教程连接Oracle数据库。当我使用命令行:java-cp c:\jdbc-test\ojdbc6.jar;c:\jdbc-test OracleJDBC我已经将ojdbc6.jar与OracleJDBC.java放在同一个文件夹中。现在我需要在Eclipse上运行它,但它给我一个错误: 是因为OJDBC6.jar位置吗?

  • 据我所知,要建立事件流,必须在客户端上创建一个事件源对象,并将其传递给服务器以注册自己。服务器在收到此请求后,适当地设置响应标头并按照事件流格式发送数据。我设置了这个流,它可以通过超文本传输协议工作,但在向服务器添加SSL后,事件流正在创建,服务器会抛出501-未实现错误。经过一些研究,我认为这可能是CORS问题,并添加了适当的标头,但这也没什么不同。我还尝试了通常适用于501个错误的小修复,例如