如何解决“无法为连接 URL 创建类 'com.mysql.jdbc.Driver' 的 JDBC 驱动程序”
Posted
技术标签:
【中文标题】如何解决“无法为连接 URL 创建类 \'com.mysql.jdbc.Driver\' 的 JDBC 驱动程序”【英文标题】:How to resolve "Cannot create JDBC driver of class 'com.mysql.jdbc.Driver' for connect URL"如何解决“无法为连接 URL 创建类 'com.mysql.jdbc.Driver' 的 JDBC 驱动程序” 【发布时间】:2016-12-10 23:40:46 【问题描述】:首先我想说我在***上检查了所有答案,我无法修复这个错误!请帮帮我!我花了很多时间,但没有结果。 我正在尝试使用 Tomcat8 创建连接池。 我有一个例外:
java.sql.SQLException: 无法创建类的 JDBC 驱动程序 'com.mysql.jdbc.Driver' 用于连接 URL 'jdbc:mysql:/localhost:3306/autopark' 在 org.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) 在 ua.khpi.shapoval.db.DbConnector.init(DbConnector.java:31) 在 ua.khpi.shapoval.db.DbContextListner.contextInitialized(DbContextListner.java:48) 在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4842) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5303) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1407) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1397) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745) 引起: java.sql.SQLException:没有合适的驱动程序 org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2151) ... 13 更多
DbConnector.class
public class DbConnector
private static Logger log = Logger.getLogger(DbConnector.class.getName());
private static DataSource dataSource;
private static Connection connection;
public static void init() throws ServletException, SQLException, NamingException, ClassNotFoundException
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env/");
DataSource ds = (DataSource) envCtx.lookup("jdbc/autopark");
System.out.println(ds.getConnection());
public static Connection getConnection() throws SQLException
return dataSource.getConnection();
context.xml 位于 META-INF 文件夹中
<?xml version="1.0" encoding="UTF-8"?>
<Context crossContext="true" reloadable="true">
<Resource name="jdbc/autopark" auth="Container" type="javax.sql.DataSource"
username="root" password="161acid161" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql:/localhost:3306/autopark" maxActive="15" maxIdle="3" />
<ResourceLink name="jdbc/autopark" global="jdbc/autopark"
type="javax.sql.DataSource" />
</Context>
web.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>Autostation</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<resource-ref>
<description>Db</description>
<res-ref-name>jdbc/autopark</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<listener>
<listener-class>ua.khpi.shapoval.db.DbContextListner</listener-class>
</listener>
</web-app>
我的 tomcat/lib 目录的内容和我的项目结构。
【问题讨论】:
我认为这是 mysql 连接器驱动程序的错误名称。我推荐你使用 Maven 来管理你的项目依赖 @Julian,我受到使用 Maven 的限制。我需要使用动态网络项目 【参考方案1】:JDBC URL 不正确,确实缺少斜杠,所以试试这个:
jdbc:mysql://localhost:3306/autopark
如果你检查得好,真正的错误是No合适的驱动程序,这意味着它找不到任何支持所提供 URL 的 JDBC 驱动程序。
【讨论】:
男人,我爱你!非常感谢!一个斜线!!!!我对这个错误感到生气! 哦,是的。我得到了Cannot create JDBC driver of class 'com.mysql.cj.jdbc.Driver' for connect URL '"jdbc:mysql://127.0.0.1:3306/db"'
...不,属性文件中不应包含任何类型的引号...显然:|
@Erk - 一个流浪的“是我的问题的原因,谢谢!以上是关于如何解决“无法为连接 URL 创建类 'com.mysql.jdbc.Driver' 的 JDBC 驱动程序”的主要内容,如果未能解决你的问题,请参考以下文章