当我尝试在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
如果我在创建EntitiyManagerFactory之前添加此行,它可以正常工作。
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");
有什么想法解决这个问题吗?感谢
答案 0 :(得分:6)
第一个真正的解决方案:尝试使用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中的Listener定义来确保JreMemoryLeakPreventionListener不保护DriverManager /server.xml - 即:
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" driverManagerProtection="false">
答案 1 :(得分:4)
当我将一个正在运行的.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中。
答案 2 :(得分:1)
问题是驱动程序类在运行时不适用于您的应用程序,将驱动程序jar放入/WEB-INF/lib
答案 3 :(得分:1)
在某些服务器上(jboss,glassfish)我还必须将驱动程序jar放入服务器默认库文件夹中。
答案 4 :(得分:1)
我有类似的问题。它通过将hibernate升级到4.1.4final来解决。