没有为jdbc找到合适的驱动程序:mysql:// localhost:3306 / test

当我尝试在Tomcat 7上运行我的JSF应用程序时,它会抛出此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 

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

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

我的依赖是

  org.hibernate hibernate-entitymanager 4.1.2.Final   mysql mysql-connector-java 5.1.19  

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

有什么想法解决这个问题吗? 谢谢

第一个真正的解决方案:尝试使用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的答案,或者通过向$ CATALINA_HOME / conf / server中的Listener定义添加driverManagerProtection="false"来确保JreMemoryLeakPreventionListener不保护DriverManager。 xml – 即:

  

当我将一个正在运行的.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中。

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

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

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