1. 程式人生 > >Java: JDBC連線MySQL資料庫插入中文內容出現亂碼

Java: JDBC連線MySQL資料庫插入中文內容出現亂碼

如上圖, 向MySQL資料庫中插入中文內容時, 插入的資訊變成了問號。

解決辦法如下:

1. 設定jsp頁面的編碼格式。

<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%response.setCharacterEncoding("UTF-8");%>

我的專案中是這樣的:

<!--index.jsp作為程式中的主頁,用於放置新增圖書資訊的表單。此表單提交到AddBook.jsp頁面處理-->
<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%response.setCharacterEncoding("UTF-8");%>
<form action="AddBook.jsp" method="post" onsubmit="return check(this);">
    <h2>新增圖書資訊</h2>
    圖書名稱: <input type="text" name="title"><br>
    圖書價格: <input type="text" name="price"><br>
    圖書數量: <input type="text" name="amount"><br>
    圖書作者: <input type="text" name="author">
    <br>
    <br>
    <input align="right" type="submit" value="提交" name="submit">
</form>

 

2. 設定資料庫的編碼方式:

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%request.setCharacterEncoding("UTF-8");%>

我的專案中是這樣的:

<!--本AddBook.jsp頁面用於處理新增圖書資訊的請求。此頁面通過JDBC所提交的圖書資訊資料寫入資料庫中-->
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%request.setCharacterEncoding("UTF-8");%>
<jsp:useBean id="book" class="cth.Book"/>
<jsp:setProperty name="book" property="*"/>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    Connection connection = null;//Connection連線
    Class.forName("com.mysql.jdbc.Driver");//載入資料驅動,註冊到驅動管理器
    String url = "jdbc:mysql://localhost:3306/mysql?characterEncoding=utf-8";//資料庫連線字串
    String username = "Chintsai";//資料庫使用者名稱
    String password = "1234";//資料庫密碼
    connection = DriverManager.getConnection(url, username, password);
    String sql = "insert into purchase_book(title,price,amount,author) values (?,?,?,?)";//新增圖書資訊的SQL語句
    PreparedStatement preparedStatement = null;//獲取PreparedStatement
    try {
        preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setString(1, book.getTitle());//對SQL語句中的第1個引數賦值
        preparedStatement.setDouble(2, book.getPrice());//對SQL語句中的第2個引數賦值
        preparedStatement.setInt(3, book.getBookCount());//對SQL語句中的第3個引數賦值
        preparedStatement.setString(4, book.getAuthor());//對SQL語句中的第4個引數賦值
        int row = preparedStatement.executeUpdate();//執行更新操作,返回所影響的行數
        if (row > 0)//判斷是否更新成功
            out.println("成功添加了" + row + " 條資訊");//更新成功輸出資訊
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {//關閉PreparedStatement,釋放資源
            if (preparedStatement != null)
                preparedStatement.close();
            preparedStatement = null;
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {//關閉Connection,釋放資源
            if (connection != null)
                connection.close();
            connection = null;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
%>
<br>
<a href="index.jsp">返回</a>
</body>
</html>

 

3. 設定JDBC連線的編碼方式:

即上圖中的那一行程式碼:

 String url = "jdbc:mysql://localhost:3306/mysql?characterEncoding=utf-8";//資料庫連線字串

這一步很多人容易疏漏,因而產生亂碼,要特別注意喲 (^U^)ノ~YO

 

最後,貼上完整的專案程式碼:Github