Hibernate Mysql5.7 SQLGrammarException: could not extract ResultSet

本博客所有内容来源于网络、书籍、和各类手册。 内容均为非盈利,旨为方便查询、总结备份、开源分享。 部分转载内容均有注明出处,如有侵权请告知,马上删除。转载本文请附上本文链接,并注明转载!
本文链接: https://blog.csdn.net/u012998306/article/details/102482386

更换了升级后的mysql5.7之后Hibernate 开始出问题了

总结了一下可能出现问题的原因。

1.配置文件中配置方言出错

mysql5.0以上要用org.hibernate.dialect.MySQL5Dialect,mysql5.0以下用org.hibernate.dialect.MySQLDialect

Hibernate中的数据库方言(Dialect)列表:https://blog.csdn.net/u012998306/article/details/102474120

2.驱动版本

驱动要和实际数据库版本匹配,不然会出错或者连接失败什么的 
5.7需要用到com.mysql.cj.jdbc.Driver而不是com.mysql.jdbc.Driver

3.数据库链接地址

用JDBC 的时候可以直接在链接后面添加?然后用&连接参数,但hibernate的配置文件允许,它另有含义,所以把重新写标签,上面是把各个参数拆出来写成标签了 
就是从jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8 
变成了 

<property name="connection.url">jdbc:mysql://localhost:3306/test</property> 
<property name="connection.useUnicode">true</property> 
<property name="connection.characterEncoding">utf8</property> 

如果需要更多的参数,就继续添加property标签并更改connection.xxx

4.时区(TimeZone)问题

Oracle公司意识到安全问题之后就给MySql添加了时区认证,所以没有添加时区会被拒绝服务 
具体要用哪个时区可以到MySql的驱动包(connector)里 
com\mysql\cj\jdbc\util\TimeZoneMapping.properties 寻找您的地区对应的代码 
而中国的大可使用上海的时区 
文件里的定义是China\ Standard\ Time=Asia/Shanghai对应的字符串名是Asia/Shanghai 
所以这里就用了<property name="connection.serverTimezone">Asia/Shanghai</property>

参考的文章:

http://blog.csdn.net/qq_36289559/article/details/70973041 
https://stackoverflow.com/questions/24222718/failed-to-create-sessionfactory-object-org-hibernate-exception-jdbcconnectionexc 
https://stackoverflow.com/questions/1273403/how-can-i-configure-hibernate-to-use-ssl-to-talk-to-the-db-server 
http://blog.sina.com.cn/s/blog_667ac0360102e9wi.html

 https://blog.csdn.net/qq_40233736/article/details/79322697

猜你喜欢

转载自blog.csdn.net/u012998306/article/details/102482386