初學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,雖然不影響運行結果,但是作為初學者來說,還是要了解一下是什么意思。

      百度翻譯如下:

 

    

 

 

    后記:拓展這部分內容,上課時講到過,但是因為某些原因錯過了,在學習了解之后會更新出這部分內容說明及應對措施。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM