【问题标题】:Cannot create JDBC driver of class '' for connect URL 'null all the time始终无法为连接 URL 'null 创建类 '' 的 JDBC 驱动程序
【发布时间】:2019-02-05 13:50:07
【问题描述】:

您好,我有以下问题: 每当我尝试连接到 MySQL DB 时,我都会收到此错误:

com.pbs.web.jdbc.ParkingBookSystem.BookControllerServlet doGet
SEVERE: null
**java.sql.SQLException: Cannot create JDBC driver of class '' for connect URL 'null'**
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2224)
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2104)
    at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1563)
    at com.pbs.web.jdbc.ParkingBookSystem.BookDbUtil.doesBookExist(BookDbUtil.java:91)
    at com.pbs.web.jdbc.ParkingBookSystem.BookControllerServlet.addBook(BookControllerServlet.java:117)
    at com.pbs.web.jdbc.ParkingBookSystem.BookControllerServlet.doGet(BookControllerServlet.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    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:2209)
    ... 29 more

我将 context.xml 放置在:C:\Users\userName\eclipse-workspace\WebAppName\src\main\resources\META-INF 代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<Context>
<Resource 
    name="ParkingBookSystem" 
    auth="Container"
    type="javax.sql.DataSource"
    maxTotal="20"
    maxIdle="5"
    maxWaitMillis="10000"
    username="sql2226123"
    password="cccccccc"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://sql2.freemysqlhosting.net:3306/sql2226123"
/>
</Context>

和我的 web.xml(放在 C:\Users\userName\eclipse-workspace\WebAppName\src\main\webapp\WEB-INF ):

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<description>ParkingBookSystem</description>
<resource-ref>
    <description>DB Connection</description>
    <res-ref-name>/ParkingBookSystem</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>

这是我用来建立数据库连接的类构造函数:

// constructor
public BookDbUtil() {
    try {
        Context initContext = new InitialContext();
        Context envContext = (Context) initContext.lookup("java:/comp/env");
        dataSource = (DataSource) envContext.lookup("ParkingBookSystem");
    } catch (NamingException e) {
        throw new IllegalStateException("Could not initialize database", e);
    }
}

我正在使用 Maven、Eclipse 和 Tomcat,这是我迄今为止尝试过的:

  • 我把mysql-connector-java-5.1.38-bin放到tomcat lib中
  • 手动将 context.xml 放到 C:\Program Files\Apache Software Foundation\Tomcat 9.0\conf\Catalina\localhost
  • 同上,但将名称从 context.xml 更改为 projectName.xml
  • 将所有内容放入 server.xml 中(并注释掉此处的默认资源)
  • 我还发现,tomcat 文件中的每一次更改都需要管理员权限,因此我为每个用户添加了完全控制,以确保不是这种情况。

我没有更多的想法,有没有人可以帮忙?

【问题讨论】:

  • 尝试在C:\Program Files\Apache Software Foundation\Tomcat 9.0\conf\context.xml添加Resource元素,记得在JNDI名称中添加jdbc/。另外,你是如何从 Eclipse 启动 tomcat 的?
  • 是的,完全来自日食
  • 这可能会有所帮助:stackoverflow.com/a/40557337/2834978
  • ...记得更改密码,除非您在此处发布的密码不是您的真实密码。

标签: java eclipse tomcat jdbc context.xml


【解决方案1】:

请;

将mysql连接器jar文件放到WEB-INF/lib目录下

并在 context.xml 中更改

<Context>
    <Resource name="jdbc/ParkingBookSystem" ...

并在 web.xml 中进行更改

<res-ref-name>jdbc/ParkingBookSystem</res-ref-name>

并更改查找

Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
dataSource = (DataSource)envContext.lookup("jdbc/ParkingBookSystem");

【讨论】:

  • 我已将 mysql-connector-java-5.1.38-bin 放到:C:\Users\userName\eclipse-workspace\WebAppName\src\main\webapp\WEB-INF\lib 和编辑了 context.xml、web.xml 和查找但仍然有相同的错误:(
  • 你 clean install 并重启服务器了吗?
  • 我做到了。我停止了服务器,然后在项目上单击鼠标右键,然后作为 Maven 构建而不是作为目标运行:我提供:全新安装。然后再次运行服务器,仍然有同样的错误:(
【解决方案2】:

好的,我找到了解决方案...问题是我的带有 context.xml 的 META-INF 位于 C:\Users\lukas\eclipse-workspace\ParkingBookSystem\src\main\resources\META-INF\context.xml 时我把它放到: C:\Users\lukas\eclipse-workspace\ParkingBookSystem\src\main\webapp 它开始起作用了。

【讨论】:

  • 如果这是对您问题的回答(例如,它解决了您的问题),您可能会将其标记为已接受的答案(即使您自己给出了答案)。如果这是另一个问题,请不要将其发布在答案中,因为这里不会被任何人回答。另外,您必须更改您最初在问题中发布的密码。最好在别人做之前。
猜你喜欢
  • 2011-11-08
  • 2018-01-14
  • 2011-05-14
  • 2011-07-06
  • 2015-04-15
  • 2015-12-18
  • 2014-01-25
  • 1970-01-01
相关资源
最近更新 更多