關於mysql-connector-java(JDBC驅動)的一些坑


最近在寫一個項目的時候,用了maven倉庫里面較新的mysql的JDBC驅動,版本是6.0.6,Mybatis的全局配置是這么寫的:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="">
        <environment id="">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="sqlmap/User.xml"/>
    </mappers>
</configuration>

但是卻發現報錯了,錯誤原因是:

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.

這是因為在訪問數據庫時無法識別時區(我選擇死亡(╬▔皿▔)凸),所以我們需要把JDBC的url值改為這樣:

<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8&serverTimezone=UTC"/>

這里要注意了,我們編譯一下項目發現出現了這樣的錯誤:

 Error creating document instance.  Cause: org.xml.sax.SAXParseException; lineNumber: 11; columnNumber: 119; 對實體 "serverTimezone" 的引用必須以 ';' 分隔符結尾。

這里其實是因為xml把&作為一個特殊符號處理了(我選擇再次死亡(╬▔皿▔)凸),所以我們需要把&替換為&amp;這樣就不會報錯了。

<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8&amp;serverTimezone=UTC"/>

當然我們也可以直接修改mysql的時區,打開mysql,輸入set global time_zone='+8:00';

解決了這個問題之后,我們繼續回到配置文件,我們再編譯一下項目,這次錯誤倒是沒有了,但是還有一些警告,雖然我們一般忽略警告,但是看起來還是挺不舒服的,所以解決一下吧。其中一個警告是這樣的:

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.

這是因為mysql的JDBC驅動使用了新的包名,所以我們需要將driver的值改為com.mysql.cj.jdbc.Driver

<property name="driver" value="com.mysql.cj.jdbc.Driver"/>

還有一個警告是這樣的:

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.

因為新版本的MySQL要求是否進行ssl連接,所以我們需要設置useSSL=false或者useSSL=true。

 <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8&amp;serverTimezone=UTC&amp;useSSL=false"/>

接下來,我們再編譯一遍項目,總算0 error, 0 warning了。我們也能看到正確結果了。

 


免責聲明!

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



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