初学mybatis框架配置MySQL数据库笔记

  因为本学期开了一门《Java程序设计框架》课程,主要讲述java有关程序框架,其中讲到了mybatis框架.

  mybatis框架简单来说就是将JDBC技术集成化的一种框架,其好处在于不需要重复编写JDBC操作数据库的代码,一定程度上方便了程序员操作数据库,但是需要程序员对于SQL语句相当熟悉才行。

  有关mybatis框架的具体内容目前还在学习,所以会在之后逐步将内容更新完善,下面先总结一下在配置mybatis框架时遇到的问题、错误及相应解决方法。

  因为授课老师使用的教学环境是:

    1.Myecplise(具体版本未知,不再本次内容范围内)

    2.mySQL5.7.17(虽然数据库版本比较老了,不过兼容性问题基本没有)

    3.navicat for mysql 11.2.7 (数据库图形化操作工具,较mysql自带的编辑器来说更容易建库建表操作数据,便于之后练习)

  

  之后,再来看看我的配置环境:

    1.Ecplise EE 4.6.3(之前学习JSP使用的java环境,装有Tomcat)

    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,虽然不影响运行结果,但是作为初学者来说,还是要了解一下是什么意思。

      百度翻译如下:

 

    

 

 

    后记:拓展这部分内容,上课时讲到过,但是因为某些原因错过了,在学习了解之后会更新出这部分内容说明及应对措施。

 

posted @ 2020-05-08 21:57  锤子猫  阅读(767)  评论(0编辑  收藏  举报