java.sql.SQLException: 找不到适合 jdbc:mysql://localhost:3306/sushi 的驱动程序

Posted

技术标签:

【中文标题】java.sql.SQLException: 找不到适合 jdbc:mysql://localhost:3306/sushi 的驱动程序【英文标题】:java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/sushi 【发布时间】:2012-07-30 07:09:31 【问题描述】:

我有一个使用 jar 文件 (lib) 来访问数据库的 Web 应用程序。 jar 文件作为独立应用程序使用时正确执行,但 webapp 收到错误:

[01-08-12 13:17:05] - 35266 WARN org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 0, SQLState: 08001

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/myapp

我已阅读类似问题的答案,但没有一个能解决我的问题。

我正在使用 Maven,我在其中添加了我正在使用的 mysql 版本 5.1.21 的依赖项。事实上,我已经为 Lib 和 Webapp 添加了它。

在此之前,我尝试在 Eclipse 中定义一个连接到同一个文件的连接驱动程序定义,该文件已复制到我的 Webapp 的 eclipse 项目中的 WEB-INF/lib 中,并且具有我在下面包含的相同参数persistence.xml 文件

我没有使用任何 java 进行配置,因为我在 persistence.xml 文件中进行了所有配置(我已将其复制到两个 META-INF 文件夹,一个用于应用程序(lib),一个用于 webapp。我正在通过 JPA 使用 Hibernate (4.1.2)。

persistence.xml文件是这样的:

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">

<persistence-unit name="myappPersistenceUnit"
    transaction-type="RESOURCE_LOCAL">
    <provider> org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/myapp" />
        <property name="javax.persistence.jdbc.user" value="root" />
        <property name="javax.persistence.jdbc.password" value="" />
    </properties>
</persistence-unit> 

</persistence>

我得到的异常是在运行时,向应用程序启动 Http 请求时,而不是在 web 应用程序的初始化时,我没有看到任何错误但出现此警告:

[01-08-12 13:16:39] - 8782 警告 org.hibernate.engine.jdbc.internal.JdbcServicesImpl - HHH000342: 无法获得与查询元数据的连接:没有合适的驱动程序 找到 jdbc:mysql://localhost:3306/myapp

我猜这是由于在初始化时不需要从数据库中查找的信息,并且在两种情况下都没有抛出异常但根本原因相同。

编辑:我使用的是 Tomcat 6.0

我们将不胜感激。

【问题讨论】:

你检查你的类路径了吗? 请添加您使用的应用服务器 @Kayser ,类路径不应该由tomcat和maven管理吗? (我正在检查) @Kayser,我通过 Apache-Tomcat v6.0 将 mysql-connector 包含在 Java Build Path->Libraries 中,因为我已将文件复制到 TOMCAT_HOME\lib。这是你指的还是我应该设置一个系统变量来指向 TOMCAT_HOME\lib? 【参考方案1】:

您的项目中似乎缺少 MySql 驱动程序。要解决这个问题,您需要添加 mysql-connector.jar。在您的项目外部。 或者,如果您使用的是 maven 项目,则在您的 pom.xml 文件中使用以下依赖项。

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

如果需要,你可以使用合适的版本!!

【讨论】:

【参考方案2】:

如果您将应用程序作为 Java 应用程序运行,请在 Eclipse 的 Java 构建路径中添加 JAR 文件。

或者,我不会将 MSQL jar 放在您的 Web 项目的 WEB-INF/lib 文件夹中,而是将它放在您的应用程序文件夹库文件夹中,应用程序服务器将加载您的驱动程序,您可以从应用服务器容器。

【讨论】:

我的 webapp 在 java 构建路径中将 lib 作为 jar 文件。此外,在为 mysql 添加 Maven 依赖项时,我将其从 web-inf/lib 文件夹中删除 @Picarus,请遵循此建议。将 MySQL 依赖项在 Maven 中作为“提供”,并将 MySQL jar 复制到 TOMCAT_HOME/server/lib 下 @mavroprovato,我已将库(提供)添加到 TOMCAT_HOME/lib 中,这是我的版本中的现有文件夹。同样的错误。文件夹一样吗?我尝试了这两个选项,但都失败了。 我的错,TOMCAT_HOME/lib 是正确的位置。确实,这个问题很奇怪。也许您应该尝试全新安装 Tomcat。【参考方案3】:

您应该将 mysql 连接器 jar 与您自己的代码一起放入并在您的项目中添加 jar 文件。

【讨论】:

【参考方案4】:

我之前也遇到过同样的问题,但我解决了这个问题。此异常可能有不同的原因。

其中之一可能是您添加到lib 文件夹的jar 可能是旧的。尝试找出 最新的 mysql-connector-jar 版本 并将其添加到您的 classpath。它可能会解决您的问题。

【讨论】:

【参考方案5】:

我在使用 Tomcat 9 时遇到了同样的问题。通过在 common/lib 和 WEB-INF/lib(使用前者)中都没有驱动程序 jar 来解决。

【讨论】:

以上是关于java.sql.SQLException: 找不到适合 jdbc:mysql://localhost:3306/sushi 的驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

Oracle DB:java.sql.SQLException:关闭连接

Cause: java.sql.SQLException: 请求的转换无效 ; uncategorized SQLException for SQL []; SQL state [99999]; er

java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 发生错误

Java:Sqlexception:位置不支持的 SQL92 令牌:178

java.sql.SQLException:接近“on”:语法错误问题

java.sql.SQLException:架构“ROOT”不存在