由于本学期开了一门《Java程序设计框架》课程,主要讲述java有关程序框架,其中讲到了mybatis框架.html
mybatis框架简单来讲就是将JDBC技术集成化的一种框架,其好处在于不须要重复编写JDBC操做数据库的代码,必定程度上方便了程序员操做数据库,可是须要程序员对于SQL语句至关熟悉才行。java
有关mybatis框架的具体内容目前还在学习,因此会在以后逐步将内容更新完善,下面先总结一下在配置mybatis框架时遇到的问题、错误及相应解决方法。mysql
由于授课老师使用的教学环境是:程序员
1.Myecplise(具体版本未知,再也不本次内容范围内)sql
2.mySQL5.7.17(虽然数据库版本比较老了,不过兼容性问题基本没有)数据库
3.navicat for mysql 11.2.7 (数据库图形化操做工具,较mysql自带的编辑器来讲更容易建库建表操做数据,便于以后练习)编程
以后,再来看看个人配置环境:服务器
1.Ecplise EE 4.6.3(以前学习JSP使用的java环境,装有Tomcat)mybatis
2.mySQL8.0(最新版本)框架
3.navicat for mysql 15(最新版本)
学习软件的伙伴们大概都知道使用工具最好不建议使用最新版,特别是须要几个工具搭配使用时,例如本次使用java链接sql的操做。但由于本人不想再从新配置mysql数据库,因此呢,就决定解决一个接一个的问题吧。(其实我的感受出现的问题不算不少……)
问题① 出现提示sql版本不匹配
Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client
百度翻译后是这样的:
通过排查发现,我安装的mysql数据库版本是8.0,可是在个人java工具中配有的mysql链接驱动板版本是
mysql官方链接驱动下载地址:https://dev.mysql.com/downloads/connector/j/5.1.html
下载完驱动包以后,只把mysql-connector-java-8.0.20.jar解压出来并放到java工程的WEB-INF/lib目录下,而后经过Build Path->Configure Build Path 将驱动包配置到 Reference Libraries目录下,自此配置的问题算是暂时解决了。可是,仍是没有办法运行,由于又报错了……
问题②:链接数据库不兼容密码认证协议
ER_NOT_SUPPORTED_AUTH_MODE……
错误意思表示客户端不支持认证协议,经过百度,找到了解决方法,仍是不兼容的问题,由于mysql最新版中更改了默认的密码认证协议。
放出参考链接:https://yq.aliyun.com/articles/705235
修改mysql密码协议配置以后,再次尝试运行测试程序,又报错了。
问题③:提示不识别编码格式
Error querying database. Cause: java.sql.SQLException: Unknown initial character set index '255' received from server. Initial client character set can be forced via the 'characterEncoding' property.
百度翻译以下:
查询了百度,发现了解决方法,就是在mybatis框架的xml配置文件中的url路径加入?useUnicode=true&characterEncoding=utf8
这段代码一样是从网上寻找的,网上可能还有其余的编码内容,这里以解决问题为主,暂不作过多研究。本觉得问题立刻解决了,谁知新的问题又出现了……
问题④:SQL服务器时区识别错误
Error querying database. Cause: java.sql.SQLException: The server time zone value '?й???????' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specifc time zone value if you want to utilize time zone support.
百度翻译以下:
依然上网百度资料,发现有不少说法是在mybatis框架下的xml配置文件中的url后面加入时区配置代码,可是通过尝试,发现问题没有解决,可是意外发现了一个解决方法,虽然目前还不清楚此方法是如何解决问题的,不过仍是以解决问题为主进行,以后在慢慢研究。
此问题的解决方法是:
这里说明一下,这个mysql-connector-java-5.1.10-bin.jar驱动包是授课老师为了教学方便发布到群里的,在文章开头提到过。在解决mysql链接驱动不匹配的问题中,加入了8.0的jar包并Build Path以后,我以为没有必要删除这个5.1的jar包,而仅仅删除了5.1的Build Path,也就是说配置环境目录中只有最新版的8.0链接驱动环境,以下图所示:
问题⑤:使用ecplise链接MySQL可能出现线程异常问题
Exception in thread "main" java.lang.NullPointerException
经过百度,找到了解决方法,就是在构建InputStream输入流对象时,须要读取xml配置文件,须要在xml配置文件前加上一个”\“,以下图所示:
以上这张截图是实现了Dao接口的getById方法,其中添加了许多显示语句,主要用于诊断问题源。
目前,发如今Ecplise编程环境下建立输入流读取配置文件时须要在配置文件名前加上”\“,可是在Myecplise编程环境下能够不用加上”\“,不清楚问题在哪里,这里注意下便可。
参考资料:https://blog.csdn.net/qq_41808387/article/details/100636977
好的,至此,程序成功运行!
拓展:在运行结果中发现出现了Warning,虽然不影响运行结果,可是做为初学者来讲,仍是要了解一下是什么意思。
百度翻译以下:
后记:拓展这部份内容,上课时讲到过,可是由于某些缘由错过了,在学习了解以后会更新出这部份内容说明及应对措施。