org.hibernate.exception.SQLGrammarException: Cannot open connection解决

环境

MyEclipse 8.6+Hibernate3.2

 

问题

 

使用Hibernate出现如下错误:

 

org.hibernate.exception.SQLGrammarException: Cannot open connection
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
	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:142)
	at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
	at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1354)
	at com.el.entities.TestELearning.before(TestELearning.java:28)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'el'
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
	at com.mysql.jdbc.Util.getInstance(Util.java:386)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:951)
	at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4600)
	at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1328)
	at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2395)
	at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2428)
	at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2213)
	at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:797)
	at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
	at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389)
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
	at java.sql.DriverManager.getConnection(DriverManager.java:582)
	at java.sql.DriverManager.getConnection(DriverManager.java:154)
	at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133)
	at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
	... 21 more

org.hibernate.TransactionException: Transaction not successfully started
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:131)
	at com.el.entities.TestELearning.after(TestELearning.java:54)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:37)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)


 

解决

 

检查数据库里是否有配置文件中涉及的数据库。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: org.hibernate.exception.sqlgrammarexception: 无法执行查询。 这个错误通常是由于SQL语法错误引起的。可能是查询语句中的某些关键字、表名、列名、函数等有误,或者是SQL语句的结构有误。需要检查SQL语句的正确性,并进行修正。 ### 回答2: org.hibernate.exception.SQLGrammarException: could not execute query 是Hibernate中的一个异常,表示无法执行查询语句。 造成这个异常的原因有很多,其中一个常见的原因是数据库中的SQL语法错误。当我们执行查询语句时,如果语法不正确,数据库无法解析这个查询,就会抛出这个异常。 解决这个问题的方法包括以下几个方面: 1.检查SQL语句的语法是否正确。可以通过在数据库客户端中直接执行SQL语句来验证语法的准确性。如果发现语法错误,需要修复语句中的错误部分。 2.检查数据库连接配置是否正确。可能是数据库连接的URL、用户名或密码配置错误,导致无法执行查询语句。可以对比配置文件中的数据库连接参数和实际数据库的配置来确认是否一致。 3.检查数据库表和字段的存在性。如果查询语句中使用了不存在的表或字段,就会导致语法错误。可以通过查询数据库元数据信息,确认所需的表和字段是否存在。 4.检查数据库的版本和兼容性。Hibernate对不同数据库有一定的兼容性要求,可能某些语法在某个数据库版本下不被支持。可以查看Hibernate的官方文档,确认所使用的Hibernate版本与数据库的兼容性。 总之,org.hibernate.exception.SQLGrammarException: could not execute query是由于Hibernate无法执行查询语句而抛出的异常。解决方法包括检查语法、数据库连接配置、表和字段的存在性以及数据库的兼容性等方面。 ### 回答3: org.hibernate.exception.SQLGrammarException: could not execute query 是Hibernate框架中的一个异常,表示无法执行查询。该异常通常是由于SQL语法错误或数据库表结构不正确导致的。 在解决这个问题之前,我们需要检查以下几个可能的原因: 1. SQL语法错误:检查HQL(Hibernate Query Language)或SQL查询中的语法是否正确。确认语句中的表名、列名和查询条件是否正确拼写。 2. 表结构不正确:检查数据库中对应的表是否存在以及表结构是否与Hibernate映射文件中的定义一致。确认表名、列名和数据类型是否正确。 3. 数据库连接错误:确保数据库连接参数正确配置,包括数据库URL、用户名和密码等。 4. 缺少必要的访问权限:确认数据库用户具有执行查询的权限。如果数据库中的表是其他用户创建的,则需要确保当前用户对表拥有足够的权限。 5. 数据库驱动版本和Hibernate版本不兼容:检查Hibernate版本和数据库驱动程序版本是否兼容。确保数据库驱动程序的版本与Hibernate所需的版本一致。 解决此问题的方法包括: 1. 仔细检查错误信息中提到的查询语句,并确保语法正确。 2. 使用数据库管理工具验证数据库表结构是否正确,或者手动创建缺失的表或字段。 3. 检查Hibernate配置文件中的数据库连接参数是否正确,并确保数据库服务已经启动。 4. 确认数据库用户具有足够的权限执行查询。可以尝试在数据库管理工具中手动执行查询语句,查看是否能够正常执行。 5. 升级或降级Hibernate版本,确保与使用的数据库驱动程序版本兼容。 在解决上述问题后,重新运行程序,应该能够成功执行查询操作。如果问题仍存在,可能需要进一步查看详细的错误信息及堆栈跟踪,以确定更确切的解决方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值