因為本學期開了一門《Java程式設計框架》課程,主要講述java有關程式框架,其中講到了mybatis框架. mybatis框架簡單來說就是將JDBC技術集成化的一種框架,其好處在於不需要重覆編寫JDBC操作資料庫的代碼,一定程度上方便了程式員操作資料庫,但是需要程式員對於SQL語句相當熟悉才行。 ...
因為本學期開了一門《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,雖然不影響運行結果,但是作為初學者來說,還是要瞭解一下是什麼意思。
百度翻譯如下:
後記:拓展這部分內容,上課時講到過,但是因為某些原因錯過了,在學習瞭解之後會更新出這部分內容說明及應對措施。