Java: JDBC連線MySQL資料庫插入中文內容出現亂碼
阿新 • • 發佈:2018-12-22
如上圖, 向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