【问题标题】:java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/databasejava.sql.SQLException: 找不到适合 jdbc:mysql://localhost:3306/database 的驱动程序
【发布时间】:2020-05-21 20:32:14
【问题描述】:

我一直在尝试为一个学校项目设置我自己的 rest api。我决定使用 MySQL 作为数据库,我想将它与我的 web 服务连接起来,但显然我总是收到以下错误消息: java.sql.SQLException: 找不到适合 jdbc:mysql://localhost:3306/userdatenbank 的驱动程序

当我查看错误信息时,它也告诉我这段代码无法执行:

public UserService() {
    try {
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/userdatenbank", "root", "adminadmin123"); 
    } catch (SQLException e) {
        e.printStackTrace();
    }  
} 

我不知道为什么这种情况不断发生... MySQL Java 连接器 JAR 文件位于“引用库”中。顺便说一句,我使用 Tomcat 9、MySQL 8、JDK 13 和 Maven (Jersey Servlet)。

【问题讨论】:

  • 如果 mysql-connector-java-*.jar 在类路径中不可用,那么您将无法连接到 MySQL 数据库……您可能弄乱了依赖关系的层次结构。
  • 确定您没有运行 MariaDB?网址不同。
  • 如何整理层次结构?
  • 不,我使用的是 MySQL,服务器在后台运行。

标签: java mysql database maven tomcat9


【解决方案1】:

在获得连接之前,您必须加载驱动程序:

Class.forName("com.mysql.jdbc.Driver");

并且相应的 JAR 必须在您的类路径中(在您的服务器的 lib 中或打包在您的 WAR 文件中)。

无论如何我建议你使用connection's pool 而不是DriverManager

连接池的主要好处是:

  1. 缩短了连接创建时间。

虽然与其他数据库相比,MySQL 提供的快速连接设置通常不是问题,但创建新的 JDBC 连接仍然会产生网络和 JDBC 驱动程序开销,如果连接被回收,则可以避免这些开销。

  1. 简化的编程模型。

使用连接池时,每个单独的线程都可以像创建自己的 JDBC 连接一样工作,从而允许您使用简单的 JDBC 编程技术。

  1. 控制资源使用。

如果您在每次线程需要时创建一个新连接,而不是使用连接池,那么您的应用程序的资源使用可能会很浪费,并且可能会导致您的应用程序在负载过重时出现不可预知的行为。

【讨论】:

  • Class.forName() 方法不会改变任何东西。还是一个错误。但是这次我也有 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 错误。
  • 如果你有一个 ClassNotFound 而不是 SQLException,有些东西会改变!正如我所写,您的类路径中必须有一个包含驱动程序实现的 JAR
  • 你的意思是 Java 连接器 jar 文件吗?这个:mysql-connector-java-8.0.19.jar?
  • 是的,我愿意!您的服务器的库中必须有 mysql-connector-java-8.0.19.jar
  • 现在我收到此错误:java.sql.SQLException:服务器时区值“Mitteleurop?ische Zeit”无法识别或代表多个时区。您必须配置服务器或 JDBC 驱动程序(通过“serverTimezone”配置属性)以使用更具体的时区值。还有这个错误:org.apache.catalina.core.StandardWrapperValve 在路径 [/gfos-inno-award-2020] 的上下文中调用 SEVERE: Servlet.service() for servlet [Jersey Web Application] 引发异常 [java.lang. NullPointerException] 与根本原因 java.lang.NullPointerException
【解决方案2】:

由于您使用的是 maven,只需在 pom.xml 文件中添加依赖项即可。

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>

只需转到 maven 存储库并搜索适合您的版本。 或者如果您已经下载了 jar 文件,请将其添加到您的项目类路径中。

编辑 -> Class.forName() is not needed since JDBC 4.0.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 2014-06-09
    • 2021-05-18
    • 2015-01-29
    • 2016-10-01
    • 2012-05-08
    • 2014-07-28
    相关资源
    最近更新 更多