连接池中没有合适的驱动程序异常 [英] no suitable driver exception in connection pooling

查看:88
本文介绍了连接池中没有合适的驱动程序异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用servlet来实现连接池.我知道有人问过很多类似的问题,但没有一个可以帮助您.

I am trying to implement connection pooling using servlet. I know there are lots of similar questions has been asked but none is able to help.

这是例外:

java.sql.SQLException:无法在以下位置创建用于连接URL的类的JDBC驱动程序nullorg.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2160)在org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2032)在org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1532)在connection.CityInfoServlet.showCityInformation(CityInfoServlet.java:104)在connection.CityInfoServlet.doGet(CityInfoServlet.java:76)在javax.servlet.http.HttpServlet.service(HttpServlet.java:622)在javax.servlet.http.HttpServlet.service(HttpServlet.java:729)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)在org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)在org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521)在org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096)在org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:674)在org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1500)在org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run(NioEndpoint.java:1456)在java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源)在java.util.concurrent.ThreadPoolExecutor $ Worker.run(未知来源)在org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)在java.lang.Thread.run(未知源)造成原因:java.sql.SQLException:在以下位置没有合适的驱动程序java.sql.DriverManager.getDriver(未知源),网址为org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2144)...另外27个

java.sql.SQLException: Cannot create JDBC driver of class for connect URL null at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2160) at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2032) at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1532) at connection.CityInfoServlet.showCityInformation(CityInfoServlet.java:104) at connection.CityInfoServlet.doGet(CityInfoServlet.java:76) at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source) Caused by: java.sql.SQLException: No suitable driver at java.sql.DriverManager.getDriver(Unknown Source) at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2144) ... 27 more

我不知道为什么显示此异常:

I don't know why this exception show :

原因:java.sql.SQLException:没有合适的驱动程序.

Caused by: java.sql.SQLException: No suitable driver.

我在WEB-INF/lib文件夹中添加了jar文件.

I added jar file in WEB-INF/lib folder.

这是我的Servlet代码:

Here is my Servlet Code :

package connection;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

@WebServlet("/CityInfoServlet")
public class CityInfoServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

DataSource dataSource = null;

public void init( ServletConfig config ) {
    try{  
        Context initContext = new InitialContext();
        Context envContext = (Context) initContext.lookup("java:/comp/env");
        dataSource = (DataSource) envContext.lookup("jdbc/worldDB");
    }
    catch( Exception exe )
    {
        exe.printStackTrace();
    }
}

public void doGet(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException{
    response.setContentType("text/html");

    PrintWriter out = response.getWriter();
    String title = "City Information From Mysql Database";
    out.print("<html><body bgcolor=\"#f0f0f0\">");
    out.print("<h1 align=\"center\">" + title + "</h1>\n");
    showCityInformation(out);

    out.print("</body></html>");
}

private void showCityInformation( PrintWriter out )
{
    Connection connection = null;
    PreparedStatement preparedStatement = null;
    try {

        String sql = "select * from city limit ?";
        connection = dataSource.getConnection();

        preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setInt(1, 10);

        ResultSet rs = preparedStatement.executeQuery();

        while( rs.next() )
        {
            int id = rs.getInt(1);
            String name = rs.getString(2);
            String countryCode = rs.getString(3);
            String district = rs.getString(4);
            int population = rs.getInt(5);

            out.print("ID: " + id + "<br>");
            out.print("Name: " + name+ "<br>");
            out.print("CountryCode: " + countryCode+ "<br>");
            out.print("District: " + district+ "<br>");
            out.println("Population: " + population+ "<br>");
            out.println("--------------------------------------"+ "<br>");
        }

        rs.close();

    }

    catch( Exception e )
    {
        e.printStackTrace();
    }
    finally
    {
        try {
            if( preparedStatement != null ) {
                preparedStatement.close();
            }
        }
        catch( SQLException sqlException ){
            sqlException.printStackTrace();
        }
        try
        {
            if( connection != null )
            {
                connection.close();
            }
        }
        catch( SQLException sqlException )
        {
            sqlException.printStackTrace();
        }
    }
  }
}

这是context.xml文件

This is context.xml file

<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/worldDB" auth="Container" type="javax.sql.DataSource"
    maxTotal="100" maxIdle="30" maxWaitMillis="10000"
    username="root" password="12345" driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/world"/>
</Context>

推荐答案

我认为..

1-您必须将合适的驱动程序复制到Server/lib文件夹

1 - you have to copy suitable driver to Server/lib folder

2-如果必须在项目META-INF上创建DataSource Connection context.xml,则进行修改

2 - If you have to created DataSource Connection context.xml on your project META-INF then modify

3-您的WEB.xml这样的项目(添加此内容)

3 - WEB.xml of you project like this (add this)

<resource-ref>
    <description>MySQLDatasource</description>
    <res-ref-name>jdbc/worldDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

然后您可以运行此应用程序 http://localhost:8080/app_name -确定但是如果您想从 http://localhost:8080

Then you can run this app http://localhost:8080/app_name - ok but if you want to call this app from http://localhost:8080

然后您必须

1-将上下文标签添加到您的Server/conf/server.xml文件中

1 - add Context tag to your Server/conf/server.xml file

2-将此行添加到您的Server/conf/context.xml

2 - add this line to your Server/conf/context.xml

 <Resource name="jdbc/worldDB" auth="Container" type="javax.sql.DataSource"
    maxTotal="100" maxIdle="30" maxWaitMillis="10000"
    username="root" password="12345" driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/world"/>

3-重新启动服务器

然后它将在服务器上下文中找到此连接.

then it will find this connection from Server context.

这篇关于连接池中没有合适的驱动程序异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆