由於本學期開了一門《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,雖然不影響運行結果,可是做爲初學者來講,仍是要了解一下是什麼意思。
百度翻譯以下:
後記:拓展這部份內容,上課時講到過,可是由於某些緣由錯過了,在學習瞭解以後會更新出這部份內容說明及應對措施。