使用SSH框架连接数据库查询,
详细报错如下:
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1542)
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet的报错是由查询语句Query queryObject = getSession().createQuery(queryString);造成的,原因总体来说就是数据库查询失败。
查询失败基本都是由于HQL语句转为SQL语句出错引起的,下面列出几种可能的原因:
- 数据库连接设置的dialect不对。
- HQL语句写错了。
- 用到的实体类写错了
- 用到的实体类映射文件hbm.xml写错了。
为了找到错误原因,我们可以在控制台检查HQL语句和SQL语句。
不会控制台显示HQL语句和SQL语句的小伙伴看这里:SSH框架控制台输出HQL语句和SQL语句的方法
红框内的是HQL语句,红框后面select开始的是对应的SQL语句。
检查SQL语句时,如果觉得SQL语句太长太复杂,可以把它放到数据库里执行一下,可以很快得到答案。
这样做下来,想来应该对这个bug有些头绪了吧。