【问题标题】:No suitable driver found for jdbc:mysql://localhost:3306/test找不到适合 jdbc:mysql://localhost:3306/test 的驱动程序
【发布时间】:2012-05-08 11:01:33
【问题描述】:

当我尝试在 Tomcat 7 上运行我的 JSF 应用程序时,它会引发此异常。

Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/test
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.getConnection(DriverManagerConnectionProviderImpl.java:192)
at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:278)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297)
... 51 more

如果我在创建 EntityManagerFactory 之前添加此行,它可以正常工作。

Class.forName("com.mysql.jdbc.Driver");
emf = Persistence.createEntityManagerFactory("manager1");

我的依赖是

<dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.1.2.Final</version>
    </dependency>

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

我的应用程序也可以正常运行 tomcat 6,无需添加 Class.forName("com.mysql.jdbc.Driver");

有解决这个问题的办法吗?谢谢

【问题讨论】:

    标签: java hibernate tomcat jpa


    【解决方案1】:

    问题是您的应用程序在运行时没有可用的驱动程序类,请将驱动程序 jar 放入/WEB-INF/lib

    【讨论】:

    • 在属性 -> 部署程序集中,我已将 Maven 依赖项添加到 WEB-INF/lib。所以驱动类应该在那里。还有 Class.forName("com.mysql.jdbc.Driver");不抛出 ClassNotFoundException
    【解决方案2】:

    在某些服务器(jboss、glassfish)上,我还必须将驱动程序 jar 放入服务器默认库文件夹中。

    【讨论】:

      【解决方案3】:

      当我将工作中的 .war 从 Tomcat 5.5 和 Java 6 迁移到 Tomcat 7 和 Java 7 时,我遇到了同样的问题。我以前工作的 .war 开始抛出“java.sql.SQLException:找不到适合 jdbc:sqlserver 的驱动程序” ……”。我可以通过简单地添加来解决

      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
      

      在调用之前

      java.sql.DriverManager.getConnection("myUrl");
      

      我知道文档说 jdbc4 驱动程序不需要这个额外的调用,但这解决了我的问题。驱动 jar (sqljdbc4.jar) 位于我的 .war 的 WEB-INF/lib 中。

      【讨论】:

        【解决方案4】:

        第一个真正的解决方案:尝试使用 Hibernate 4.1.0 和 4.1.3.Final。

        我在 Hibernate 4.1.2 上遇到了这个问题,最终偶然发现了https://forum.hibernate.org/viewtopic.php?p=2454336。据我所知,Tomcat 的更高版本(针对 DeviceManager 的泄漏性质的修复)和 Hibernate 4.1.2 之间有点不兼容。

        其他解决方法是显式调用驱动程序的注册,如 Brad Whitaker 的回答,或者通过将 driverManagerProtection="false" 添加到 $CATALINA_HOME/conf/server 中的侦听器定义来确保 JreMemoryLeakPreventionListener 没有保护 DriverManager .xml - 即:

        <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" driverManagerProtection="false">
        

        【讨论】:

          【解决方案5】:

          我有类似的问题。这是通过将hibernate升级到4.1.4final来解决的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-08-14
            • 2016-10-01
            • 2014-07-28
            • 1970-01-01
            • 1970-01-01
            • 2012-05-27
            • 2013-05-09
            • 2012-07-30
            相关资源
            最近更新 更多