2012-04-27 142 views
0

當我嘗試在Tomcat 7上運行我的JSF應用程序時,它會引發此異常。沒有找到適合jdbc的驅動程序:mysql:// localhost:3306/test

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");

任何想法來解決這個問題?由於

回答

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之間存在一些不兼容問題。

的其他解決方法是顯式調用驅動程序的登記,如在布拉德·惠特克的回答,或以確保JreMemoryLeakPreventionListener沒有被添加driverManagerProtection="false"在$ CATALINA_HOME/conf目錄/服務器監聽定義保護DriverManager的。 xml - 即:

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

的問題是驅動程序類是不存在在運行時可用您的應用程序,把驅動jar到/WEB-INF/lib

+0

在屬性 - >部署程序集中,我將Maven依賴關係添加到WEB-INF/lib。所以駕駛員級別應該在那裏。另外Class.forName(「com.mysql.jdbc.Driver」);不拋出ClassNotFoundException – mkayman 2012-04-27 17:23:26

1

在某些服務器(JBoss的,GlassFish的),我也只好把驅動程序jar到服務器默認庫文件夾。

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目錄下。

1

我有類似的問題。它通過將休眠升級到4.1.4final來解決。

相關問題