简体   繁体   中英

No suitable driver found for jdbc:mysql://localhost:3306/test

When i try to run my JSF application on Tomcat 7, it throws this exception.

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

If I add this line before creating EntitiyManagerFactory, it works fine.

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

My dependencies are

<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>

Also my application works fine tomcat 6, without adding Class.forName("com.mysql.jdbc.Driver");

Any idea to solve this problem? Thanks

First and real solution: Try with Hibernate 4.1.0 and 4.1.3.Final.

I ran into this issue on Hibernate 4.1.2 before eventually stumbling across https://forum.hibernate.org/viewtopic.php?p=2454336 . As far as I can see, it's a bit of an incompatibility between the later versions of Tomcat (In its fixes for the leaky nature of the DeviceManager) and Hibernate 4.1.2.

The other workarounds are to invoke the registration of the driver explicitly, as in Brad Whitaker's answer, or to make sure the JreMemoryLeakPreventionListener isn't protecting the DriverManager by adding driverManagerProtection="false" to the Listener definition in $CATALINA_HOME/conf/server.xml - that is:

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

I encountered this same problem when I migrated a working .war from Tomcat 5.5 and Java 6 to Tomcat 7 and Java 7. My previously working .war started throwing "java.sql.SQLException: No suitable driver found for jdbc:sqlserver...". I was able to resolve by simply adding

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

immediately before invoking

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

I'm aware that documentation says this additional call is not required with the jdbc4 driver, but this fixed my problem. The driver jar (sqljdbc4.jar) was located in WEB-INF/lib of my .war.

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

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

I have similar issue. It is solved by upgrading hibernate to 4.1.4final.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM