2011-08-07 45 views
4

我想在一个由web项目引用的Java项目中运行hibernate。除了我不能休眠以连接到我的数据库以外,这很简单。我有很多人描述这个问题,并得到大量的答案,但似乎没有为我工作。休眠 - 没有为jdbc:mysql找到合适的驱动程序// *

这是我hibernate.cfg.xml中的样子:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 
<session-factory> 
    <!-- Database connection settings --> 
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="hibernate.connection.url">jdbc:mysql//localhost:3306/dbname</property> 
    <property name="hibernate.connection.username">root</property> 
    <property name="hibernate.connection.password">commander</property> 

    <!-- JDBC connection pool (use the built-in) --> 
    <property name="connection.pool_size">50</property> 

    <!-- SQL dialect --> 
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 

    <!-- Enable Hibernate's automatic session context management --> 
    <property name="current_session_context_class">thread</property> 

    <!-- Enable the second-level cache --> 
    <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property> 

    <!-- Echo all executed SQL to stdout --> 
    <property name="show_sql">true</property> 

    <!-- Drop and re-create the database schema on startup --> 
    <property name="hbm2ddl.auto">update</property> 

    <mapping resource="com/amakena/profile/mapping/Credentials.hbm.xml"/> 
    <mapping resource="com/amakena/profile/mapping/Profile.hbm.xml"/> 
    <mapping resource="com/amakena/profile/mapping/City.hbm.xml"/> 
    <mapping resource="com/amakena/profile/mapping/Country.hbm.xml"/> 
    <mapping resource="com/amakena/profile/mapping/Gender.hbm.xml"/> 
</session-factory> 
</hibernate-configuration> 

我调试的代码DriverManagerConnectionProvider类,引发异常试图在的getConnection()方法

Connection conn = DriverManager.getConnection(url, connectionProps); 

我检查了url和connectionProps,它们是hibernate.cfg.xml中的那些

我已经在我的tomcat \ lib文件夹中添加了 mysql-connector-java-3.1.14-bin,我可以在eclipse下的Libraries> Apache Tomcat v6.0>中看到它。我也将它添加到我的%Javahome%\ lib \ ext和我的CLASSPATH变量(我知道这是无用的,因为我是kindda绝望)。

我确信我的司机是仅由session.beginTransaction之前运行下面的代码()这反过来又导致DriverManagerConnectionProvider.getConnection()

Class.forName("com.mysql.jdbc.Driver"); 
Properties connectionProperties = new Properties(); 
connectionProperties.put("user", "root"); 
connectionProperties.put("password", "root"); 
DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname", connectionProperties); 

我注意到,发光正确安装第一行导致相同的异常。

抛出异常

WARNING: Method execution failed: 
org.hibernate.exception.JDBCConnectionException: Cannot open connection 
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:99) 
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52) 
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449) 
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) 
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:160) 
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:81) 
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at  org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:345) 
at $Proxy0.beginTransaction(Unknown Source) 
at com.amakena.profile.dao.CredentialsDao.hydrate(CredentialsDao.java:45) 
at com.amakena.profile.ProfileManager.login(ProfileManager.java:19) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.directwebremoting.impl.ExecuteAjaxFilter.doFilter(ExecuteAjaxFilter.java:34) 
at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428) 
at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:431) 
at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:283) 
at org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:52) 
at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101) 
at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:146) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
at java.lang.Thread.run(Unknown Source) 

Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql//localhost:3306/dbname 
at java.sql.DriverManager.getConnection(Unknown Source) 
at java.sql.DriverManager.getConnection(Unknown Source) 
at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133) 
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) 
... 37 more 
WARNING: --Erroring: batchId[24] message[org.hibernate.exception.JDBCConnectionException: Cannot open connection] 

我感谢所有帮助我能得到。提前致谢。

版本中使用:Tomcat的V6.0 - Hibernate的3.6.6 - Java 6中 - 的Eclipse 3.5.2 R35x

回答

15

你忘了冒号 “MySQL的” 后:

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/dbname</property> 

这里的doc的URL格式:

jdbc:mysql://[host][,failoverhost...][:port]/[database] 

没有合适的驱动程序总是意味着驾驶员JAR已装入,但你的URL语法不正确。

+0

并非总是如此。该驱动程序可能根本不能被加载,或者ClassNotFoundException被完全抑制。但是,当驱动程序加载作业被委托给一个体面的ORM时,事实并非如此。 – BalusC

+0

为什么会被压制?那是Hibernate的情况吗? ClassNotFoundException是否表示未加载驱动程序?这一直是我的经验。 – duffymo

+0

由初学者在Class#forName()'调用中不处理异常的错误所抑制。 – BalusC

5
jdbc:mysql://localhost:3306/dbname 

你缺少MySQL的

+0

谢谢你,你是对的。我想要结果,但这是我第一次在stackoverflow上,我没有足够的声誉。 – ALYS

0

另一个原因是驱动程序类没有找到,请确保您的驱动程序类加载成功。

相关问题