MyBatis與JDBC連接數據庫所使用的url之間的差異


在Windows7 系統上安裝了MySQL 8.0,然后創建Maven工程,配置pom.xml文件,添加了如下依賴:

<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>

(1)在mybatis-config.xml中,配置數據庫連接環境:

<environments default="development">
<environment id="development">
<transactionManager type="JDBC" >
<property name="" value="" />
</transactionManager>
<dataSource type="UNPOOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC" />
<property name="username" value="root" />
<property name="password" value="password@password" />
</dataSource>
</environment>
</environments>

運行測試函數進行連接測試,出現如下錯誤提示:

org.apache.ibatis.exceptions.PersistenceException:
### Error building SqlSession.
### Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 21; columnNumber: 102; 對實體 "characterEncoding" 的引用必須以 ';' 分隔符結尾。

上網搜索解決方案,才知道 mybatis 的配置文件中,這里 url 中的 '&' 符號應當寫成 '&amp;' ,修改后的 url 如下:

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

這樣就可以正常連接了。

(2)鑒於1中的錯誤,嘗試使用JDBC連接MySQL時,如下進行連接:

@Test
    public void testJDBC()
    {
        Connection conn = null;
        try
        {
            String userName = "root";
            String passWord = "password@password";
            String jdbcUrl = "jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=UTC";
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(jdbcUrl, userName, passWord);
            String sql = "select id,countryname,countrycode from country";
            PreparedStatement pstmt = conn.prepareStatement(sql);
            ResultSet rs = pstmt.executeQuery();
            while (rs.next())
            {
                int id = rs.getInt("id");
                String countryname = rs.getString("countryname");
                String countrycode = rs.getString("countrycode");
                System.out.println(id + "\t" + countryname + "\t" + countrycode);
            }
            pstmt.close();
        }
        catch (ClassNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        finally
        {
            System.out.println("Game Over!");
        }
    }

運行測試函數,結果出現如下錯誤:

java.sql.SQLNonTransientConnectionException: Cannot load connection class because of underlying exception: com.mysql.cj.exceptions.WrongArgumentException: Malformed database URL, failed to parse the connection string near ';characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=UTC'.

嘗試修改 url ,將 '&amp;' 改成 '&' , 結果就運行正常了,說明 JDBC 方式連接 MySQL 不需要對 '&' 進行轉義。

特此記之。


免責聲明!

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



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