JDBC連接Mysql數據庫出現的問題匯總

MySQL

前言

最近安裝了一個 mysql 8.0 版本的數據庫,在程序中連接的時候可謂是狀況不斷。之前也會遇到一些問題,這里就對使用 JDBC 連接mysql 會出現的問題做一個匯總。

在此之前說明一下環(huán)境:

  • 開發(fā)工具:IDEA

  • mysql版本: 8.0.12 for Win64 on x86_64 (MySQL Community Server - GPL)

  • mysql驅動包:8.0.12

驅動包URL 的改變

異常信息

Loading class com.mysql.jdbc.Driver. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

原因

通過異常我們可以發(fā)現,新的驅動url是com.mysql.cj.jdbc.Driver,經過在網上查閱資料發(fā)現,從 mysql6開始,驅動包開始使用新的驅動 url。如果使用舊的 5.0 版本的驅動包,則不用驅動URL,但是如果使用舊的驅動可能會出現一些意想不到的問題。所以還是建議將驅動包升級,然后改變 驅動 URL 的值。

解決方法

將驅動 URL 由com.mysql.jdbc.Driver 換成 com.mysql.cj.jdbc.Driver

SSL 警告

警告信息

Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

原因

對警告信息翻譯如下。

不建議在沒有服務器身份驗證的情況下建立SSL連接。根據MySQL 5.5.45+,如果未設置顯式選項,則默認情況下必須建立5.6.26+和5.7.6+要求的SSL連接。對于不使用SSL的現有應用程序,ValuyServer證書屬性設置為“false”。您需要通過設置useSSL=false來顯式禁用SSL,或者設置useSSL=true并提供用于服務器證書驗證的信任庫`。

解決方法

一般在開發(fā)中基本不需要使用 SSL 連接,在連接字符串后添加useSSL=false參數就行。但是如果真的有 SSL 連接的需要,則在驅動 URL 后添加useSSL=true參數。

jdbc:mysql://localhost:3306/dbname?characterEncoding=UTF-8&useSSL=false

時區(qū)問題

異常信息

java.sql.SQLException: The server time zone value '?D1ú±ê×?ê±??' 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.

原因

同樣也是由于版本升級后,新的版本數據庫和系統(tǒng)之間有了時區(qū)差異,需要指定時區(qū)serverTimezone

解決方法

  • 連接字符串后添加參數&serverTimezone=GMT%2B8,最終連接字符串如下:

    jdbc:mysql://localhost:3306/dbname?characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
    
  • 修改數據庫時間。先通過命令行連上數據庫,依次輸入命令及其輸出如下

    mysql> show variables like "%time_zone";
    +------------------+--------+
    | Variable_name    | Value  |
    +------------------+--------+
    | system_time_zone |        |
    | time_zone        | SYSTEM |
    +------------------+--------+
    2 rows in set, 1 warning (0.04 sec)
    
    mysql> set global time_zone="+8:00";
    Query OK, 0 rows affected (0.01 sec)
    

XML 配置文件中 & 的轉義

異常信息

org.mybatis.generator.exception.XMLParserException: XML Parser Error on line 16: 對實體 "useSSL" 的引用必須以 ';' 分隔符結尾。

原因

這是我在使用mybatis generator時出現的錯誤。當時我想在連接字符串后加上useSSL參數,但是由于在 XML 文件中,&是被禁止的,所以需要使用 &的時要用它的轉義&來代替。

解決方法

將連接字符串中的 &符號改成&

詳細連接字符串參考

jdbc:mysql://127.0.0.1:3306/dbname?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false&serverTimezone=GMT%2B8&verifyServerCertificate=false&autoReconnct=true&autoReconnectForPools=true&allowMultiQueries=true 

當然如果是使用 XML 作為配置文件,需要將 連接字符串中的 &符號改成&

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現,斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • =========================================================...
    lavor閱讀 3,644評論 0 5
  • 曾經你得到一筆數目可觀的錢,欣喜若狂,你小心經營,自己不斷添進去一點,還是活期隨用隨取,好不受用。日子很快,一年三...
    小小羊_閱讀 176評論 0 0
  • 高考出成績的那天,看到這樣的一句話:不管高中這三年我會做了多少數學題,還是高考數學我考了多少分,我必須感謝曾經那個...
    牛香香閱讀 1,413評論 0 2
  • 目標:我可以輕松的實現在2019年1月份以后的每一個月的工資,將都是完完全全的屬于我自己的,可以隨意支配的了! 動...
    殷琴閱讀 214評論 0 0

友情鏈接更多精彩內容