2010-06-18 84 views
2

我写一个测试Java应用程序和它的作品的权利,但是当我点击“保存这个网络应用程序抛出这样的异常,并以相同cfg.xml文件休眠+ PostgreSQL的抛出JDBCConnectionException:无法打开连接

<property name="hibernate.bytecode.use_reflection_optimizer">false</property> 
<property name="hibernate.connection.autocommit">true</property> 
<property name="hibernate.connection.release_mode">auto</property> 
<property name="hibernate.current_session_context_class">thread</property> 
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property> 
<property name="hibernate.connection.password">1234</property> 
<property name="hibernate.connection.url">jdbc:postgresql://localhost/postgres</property> 
<property name="hibernate.connection.username">postgres</property> 
<property name="hibernate.default_schema">public</property> 
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property> 

<property name="hibernate.ejb.discard_pc_on_close">false</property> 
<property name="hibernate.query.jpaql_strict_compliance">true</property> 
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property> 
<property name="hibernate.transaction.flush_before_completion">false</property> 
<property name="hibernate.show_sql">false</property> 
<property name="hibernate.generate_statistics">false</property> 
<property name="hibernate.use_sql_comments">false</property> 
<property name="hibernate.connection.pool_size">100</property> 

“按钮,我得到以下异常:

javax.servlet.ServletException: org.hibernate.exception.JDBCConnectionException: Cannot open connection 
javax.faces.webapp.FacesServlet.service(FacesServlet.java:325) 

root cause 

javax.faces.el.EvaluationException: org.hibernate.exception.JDBCConnectionException: Cannot open connection 
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102) 
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
javax.faces.component.UICommand.broadcast(UICommand.java:315) 
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775) 
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267) 
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82) 
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
javax.faces.webapp.FacesServlet.service(FacesServlet.java:312) 

root cause 

org.hibernate.exception.JDBCConnectionException: Cannot open connection 
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:98) 
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52) 
org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449) 
org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) 
org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142) 
org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85) 
org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1463) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
java.lang.reflect.Method.invoke(Unknown Source) 
org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:344) 
$Proxy108.beginTransaction(Unknown Source) 
com.yemex.beans.CompanyBean.saveOrUpdate(CompanyBean.java:52) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
java.lang.reflect.Method.invoke(Unknown Source) 
org.apache.el.parser.AstValue.invoke(AstValue.java:196) 
org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) 
com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:98) 
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) 
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
javax.faces.component.UICommand.broadcast(UICommand.java:315) 
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775) 
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267) 
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82) 
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
javax.faces.webapp.FacesServlet.service(FacesServlet.java:312) 

root cause 

java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost/postgres 
java.sql.DriverManager.getConnection(Unknown Source) 
java.sql.DriverManager.getConnection(Unknown Source) 
org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133) 
org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) 
org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) 
org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142) 
org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85) 
org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1463) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
java.lang.reflect.Method.invoke(Unknown Source) 
org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:344) 
$Proxy108.beginTransaction(Unknown Source) 
com.yemex.beans.CompanyBean.saveOrUpdate(CompanyBean.java:52) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
java.lang.reflect.Method.invoke(Unknown Source) 
org.apache.el.parser.AstValue.invoke(AstValue.java:196) 
org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) 
com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:98) 
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) 
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
javax.faces.component.UICommand.broadcast(UICommand.java:315) 
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:775) 
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1267) 
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82) 
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
javax.faces.webapp.FacesServlet.service(FacesServlet.java:312) 

块引用

回答

0

有什么问题吗?

唯一的例外是很明确的:

org.hibernate.exception.JDBCConnectionException:无法打开连接

确保您可以连接到您连接到数据库,该配置正确的,你没有网络问题,防止连接等

+0

但我配置休眠cfg.xml中llike那; \t <属性名= “hibernate.connection.driver_class”> org.postgresql.Driver \t <属性名= “hibernate.connection.password”> 1234 \t <属性名= “hibernate.connection.url” > JDBC:在PostgreSQL://本地主机/ postgres的 \t <属性名= “hibernate.connection.username”> postgres的 \t <属性名= “hibernate.default_schema”>公共 <属性名=“hibernate.dialect “> org.hibernate.dialect.PostgreSQLDialect – 2010-06-18 15:43:56

+0

好吧,你有一个postgres数据库在默认端口上运行在本地主机上,它有一个名为postgres的数据库吗?它是否有一个名为postgres的用户名为postgres? – 2010-06-18 15:56:32

+0

是有一个数据库是名称postgres和使用默认端口 这个数据库有一个用户名为postgres和它的通行证='1234' – 2010-06-18 16:05:18

1

我没看你的配置文件,但我假设它配置至少相当不错,因为堆栈跟踪指示th它试图连接到本地主机JDBC url的postgres数据库。

它看起来像一个大问题是,它无法找到的Postgres JDBC驱动程序:

根源

值java.sql.SQLException:PostgreSQL的:找到了JDBC没有合适的驱动程序/ /本地主机/ postgres的java.sql.DriverManager.getConnection(未知来源)java.sql.DriverManager.getConnection(未知来源)org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133)

确保JAR文件在您的类路径中。如果您还没有它,可以在这里下载: http://jdbc.postgresql.org/

+0

我写了一个测试Java应用程序,它的工作原理正确,但我认为这个Web应用程序有问题。我控制着JDBC驱动程序,它是正确的 – 2010-06-18 16:07:32

6

遇到异常时,检查堆栈跟踪中最底层的根本原因是值得的。在这种情况下,它是以下几点:

java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost/postgres 

这只是意味着该URL是错误的,或者所需的驱动程序不存在当前运行时类路径。由于根据PostgreSQL JDBC documentation,URL看起来很好,所以当前运行时类路径中缺少驱动程序。

因此,要解决此问题,您需要将JDBC驱动程序JAR文件放入webapp的运行时类路径中。 /WEB-INF/lib是webapp的默认运行时类路径覆盖的文件夹之一。只需将PostgreSQL JDBC驱动程序JAR文件放在那里并重新部署即可。

+0

驱动程序路径已经是/ WEB-INF/lib,但同样的问题继续 – 2010-06-18 17:18:28

+1

显然已经使用了不同的类加载器。尝试在'Tomcat/conf/catalina.properties'中放入'Tomcat/lib'或将JAR文件的根路径添加到'shared.loader'。 – BalusC 2010-06-18 17:24:39

0

确认您在classpath中具有用于数据库驱动程序的jar。 验证驱动程序类名是否正确。 验证connection.url是否正确。 我得到了同样的错误。唯一不同的是,我正在使用Oracle 11g。我在类路径中使用了ojdbc14.jar,驱动程序类名称正确,但connection.url属性错误。 在Oracle 11g中的情况下的正确的格式是

JDBC:预言:瘦:@localhost:1521:global_dsn_name