自学一个项目,里面需要用到将大文件上传(其实就是图片了)到数据库,我用的是mysql6.0.11,因为驱动版本太低(mysql-connector-java-3.1.12-bin.jar)不能很好的支持图片上传,于是网上下载了高点的版本(mysql-connector-java-5.1.26-bin.jar),
1.结果运行报错(ERROR JDBCExceptionReporter:78 - Could not retrieve transation read-only status server)百度了下问题出在数据库隔离级别(当数据库隔离级别为REPEATABLE-READ时,发布一个select语句也算是事物的开始,而且在hibernate里会把以select语句开头的事务标记为只读事务,此时在这个事务里再执行insert、update、delete等DML语句就会报错)
解决方式:数据库新建查询SHOW VARIABLES LIKE '%iso%';
找到tx_isolation的value ,数据库文档中,tx_isolation值共4种
分别对应1.该事物隔离级别可读取其它事物未提交的结果
2.该事物隔离级别只会读取已提交的数据,在事务中已更改但未读取的数据不会读取
3.该事务隔离级别只会读取已提交的结果,与READ-COMMITTED不同的是,repeatable-read在开启事务的情况下, 同一条件的查询返回的结果永远是一致的,无论其它事物是否提交了新的数据
4.这种隔离级别和repeatable-read类似,只会读取其它事物已提交的内容,有一点不同的地方在于,如果autocommit为false,那么每一条select语句会自动被转化为select … lock in share mode.这样出现一些阻塞情况
我们要做的就是把tx_isolation的值改成第二种形式(READ-COMMITTED),新建查询里输入SET tx_isolatinotallow='READ-COMMITTED';
重启JAVA,问题解决。
**2.**继续报错(Unknown system variable ‘tx_read_only’)
继续百度,问题出在数据库版本与驱动版本不匹配(驱动版本过高或者过低),其实不用多想。换个版本驱动试试,其实不存在驱动过低的说法,我之前6.0的mysql配3.0的驱动照样用,但不要选版本太高的驱动,万一你数据库版本低了怎么办。
但是我手贱配了个6.0的驱动(mysql-connector-java-6.0.6.jar),结果一系列问题出现了
2.1,配置文件与5.0的驱动版本不一样
5.0
Url:jdbc:mysql://localhost:3306/hibernate
Class:com.mysql.jdbc.Driver
6.0
Url:jdbc:mysql:///hibernateserver?Timeznotallow=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
Class:com.mysql.cj.jdbc.Driver
其中Timezone这个参数必加,这是个时区设置,也能理解,这样设置最起码数据库取时间能取到北京时间了,useSSL这个参数我也不清楚是不是必加,因为有的时候链接数据库要进行什么SSL验证(我也不知道是神马东西),为了不必要的麻烦useSSL=false跳过这个验证。
2.2使用mysql-connector-java-6.0.6.jar是又报JAVA版本太低的错误(Unsupported major.minor version 52.0 )
我去,我用的1.7的版本,又升级到1.8了,以为终于配置好了。期间有修改项目JDK版本的操作,太多不好截图,贴个链接吧百度经验结果报错
3.CLIENT_PLUGIN_AUTH is required+Error calling Driver#
这个原因是数据库与驱动起冲突,说白了就是数据库和驱动不兼容,里面原因可能比较多,我也不知道到底怎么回事。数据库可以测试能不能用,肯定是驱动版本出问题了,得,再换个版本的驱动(mysql-connector-java-5.1.6-bin.jar)
配置好,终于正常了
**总结:**首先出现关于ERROR JDBCException的错误时先检查一下配置文件,可能有什么忘打开或者关闭的功能甚至写错了什么东西,如果还不行就不要纠结了,换驱动,还不能换版本太高的驱动,要不麻烦一大堆其次是出现Error calling Driver#这个错误,不用多想,要么是引用的驱动与数据库起冲突,要么就是你导入或者引用时就出了问题,还是检查一遍配置文件,没错就赶紧换驱动
第一次写博客,因为是技术小白,希望能通过写博客记录自己遇到的问题方便自己提升技艺。如能帮到您,万分荣幸,若有什么不对的地方,还望指正,共同进步