1. 程式人生 > >JSP連線MySQL資料庫時中文編碼問題

JSP連線MySQL資料庫時中文編碼問題

當我們用JDBC或者資料來源,從資料庫中提取資料的時候,往往會遇到這樣的困難:我們使用的資料庫編碼可能與我們網頁使用的編碼不一致,這就導致我們從資料庫中提取的資料在網頁中顯示出來的是亂碼。
我的執行環境仍然是eclipse3.2_Callisto+jdk1.5.0_03+Tomcat v5.5
資料庫選用的是MySQL 4.1
出現這種現象的原因是:
我使用的MySQL的JDBC的驅動程式是mysqldrover.jar,這種驅動程式預設的情況下采用的是ISO-8859-1編碼。
google一下,得知ISO/IEC 8859-1,又稱Latin-1或“西歐語言”,是國際標準化組織內ISO/IEC 8859的第一個8位字符集。它以ASCII為基礎,在空置的0xA0-0xFF的範圍內,加入192個字母及符號,藉以供使用變音符號的拉丁字母語言使用。顯然這種編碼不適合中國字。
所以我們可以採用這種方法得到中文。
舉個例子:
我們可以先用MySQL建立一個數據庫:

--------------------------------------------------------------------------------------
use mysql;
create database BookDB;
use BookDB;
CREATE TABLE books
(id VARCHAR(8)
 PRIMARY KEY,
name VARCHAR(24),
title VARCHAR(96),
price FLOAT,
yr INT,
description VARCHAR(30),
saleAmount INT);

INSERT INTO books VALUES('201', '王芳',
 'Java程式設計指南',
 33.75, 1999, '讓讀者輕輕鬆鬆掌握Java語言', 1000);

INSERT INTO books VALUES('202', '張丙',
 'Weblogic技術參考', 45.99,
 2002, '真的不錯耶', 2000);

INSERT INTO books VALUES('203', '孫豔',
 'Oracle資料庫教程',
 40, 2003, '關於Oracle的最暢銷的技術書', 2000);

INSERT INTO books VALUES('204', '大衛',
 '從Oak到Java: 語言的革命',
 20.75, 1998, '很值得一看', 2000);

INSERT INTO books VALUES('205', '阿明',
 'Apache從入門到精通',
 50.75, 2002, '權威的Apache技術資料', 2000);

INSERT INTO books VALUES('206', '洪軍',
 'Java與資料演算法 ',
 54.75, 2002, '權威的Java技術資料', 2000);

 ---------------------------------------------------------------------------------------

接著我們就可以做一個簡單的JSP檔案來查詢我們的BookDB了
取名為Dbjsp.jsp

----------------------------------------------------------------------------------------

<!--首先匯入一些必要的packages-->
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<!--告訴編譯器使用SQL包-->
<%@ page import="java.sql.*"%>
<!--設定中文輸出-->
<%@ page language="java" contentType="text/html; charset=GB2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
  <title>DbJsp.jsp</title>
</head>
<body>
<%
//以try開始
try
{
Connection con;
Statement stmt;
ResultSet rs;
//載入驅動程式,下面的程式碼為載入MySQL驅動程式
Class.forName("com.mysql.jdbc.Driver");
//註冊MySQL驅動程式
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//用適當的驅動程式連線到資料庫
String dbUrl =  "jdbc:mysql://localhost:3306/BookDB?useUnicode=true&characterEncoding=GB2312";

String dbUser="root";
String dbPwd="1234";
//建立資料庫連線
con = java.sql.DriverManager.getConnection(dbUrl,dbUser,dbPwd);
//建立一個JDBC宣告
stmt = con.createStatement();
//增加新記錄
stmt.executeUpdate("INSERT INTO books (id,name,title,price) VALUES ('999','Tom','Tomcat Bible',44.5)");
//查詢記錄
rs = stmt.executeQuery("SELECT id,name,title,price from books");
//輸出查詢結果
out.println("<table border=1 width=400>");
while (rs.next())
{
String col1 = rs.getString(1);
String col2 = rs.getString(2);
String col3 = rs.getString(3);
float col4 = rs.getFloat(4);

//convert character encoding
col1=new String(col1.getBytes("ISO-8859-1"),"GB2312");
col2=new String(col2.getBytes("ISO-8859-1"),"GB2312");
col3=new String(col3.getBytes("ISO-8859-1"),"GB2312");

//列印所顯示的資料
out.println("<tr><td>"+col1+"</td><td>"+col2+"</td><td>"+col3+"</td><td>"+col4+"</td></tr>");
}
out.println("</table>");

//刪除新增加的記錄
stmt.executeUpdate("DELETE FROM books WHERE id='999'");

//關閉資料庫連結
rs.close();
stmt.close();
con.close();
}

//捕獲錯誤資訊
catch (Exception e) {out.println(e.getMessage());}
%>
</body>
</html>

//對了,關鍵的地方就在於紅色的程式碼部分。第一個紅色部分用來在連線

//資料庫的URL時就指定好字元編碼

//為了保險起見,我們在往網頁上輸出時,即第二部分紅色程式碼部分。

//這個主要是當我們知道JDBC使用的字元編碼時,我們可以把資料庫中的字元提取出來的

//時候強制轉換為我們想要的比如GB2312

--------------------------------------------------------------------------------------------------------------------------

OK這樣就可以確保我們解決中文字元的輸出問題了!

相關推薦

JSP連線MySQL資料庫中文編碼問題

當我們用JDBC或者資料來源,從資料庫中提取資料的時候,往往會遇到這樣的困難:我們使用的資料庫編碼可能與我們網頁使用的編碼不一致,這就導致我們從資料庫中提取的資料在網頁中顯示出來的是亂碼。我的執行環境仍然是eclipse3.2_Callisto+jdk1.5.0_03+Tom

Java使用jdbc連線MySQL資料庫設有設定編碼

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Erreur de syntaxe près de '????' à la ligne 1     at java.base/jdk.internal.

Spring Boot JPA MySQL 入庫MySQL資料庫中文亂碼的解決辦法

問題表述:        上篇部落格中抒寫了Spring Data Jpa實體類自動建立資料庫表失敗解決即原因(踩過的坑),接著在操作JPA插入資料進資料庫時,發現數據庫的值為中文亂碼(??),需要注意一下的配置點,所以記錄一下,希望能幫到大家(#^.^#

Android通過jdbc連線mySQL資料庫資料庫拒絕連線

原因: mysql伺服器出於安全考慮,預設只允許本機使用者通過命令列登入。 解決方案: 先通過localhost登入mysql伺服器 將mysql伺服器的mysql資料庫的user表中root使用者的Host欄位改為"%"。 操作如下: window+r 輸

驗證myeclipse通過jsp連線mysql資料庫是否成功

首先,我們需要建立一個數據庫和表 比如我們create database a 然後我們可以建立表 這樣我們就建立了一個數據庫和一張表,然後我們需要實現子jsp中判斷是否連線進入資料庫 程式碼: <%@ page language="java" impo

關於jsp連線mysql資料庫顯示圖片,老師無能,不會教人,求大神賜教

圖片選擇部分: <%@ page contentType=“text/html; charset=utf-8” language=“java” import=“java.sql.*” errorPage="" %> <% String path

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

如上圖, 向MySQL資料庫中插入中文內容時, 插入的資訊變成了問號。 解決辦法如下: 1. 設定jsp頁面的編碼格式。 <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> &

jsp 連線 mysql 資料庫測試

一、建立資料庫(指令碼如下:) create database javaee; use javaee; create table news_inf ( news_id int primary ke

連線mysql資料庫出現1045錯誤的解決方法。

錯誤程式碼 1045 Access denied for user 'root'@'localhost' (using password:YES) 解決辦法是重新設定root使用者密碼,在Windows平臺下操作步驟如下: 1、以系統管理員身份登入到系統; 2、如果My

連線MySQL資料庫常見故障問題的分析與解決

===================================================================================錯誤資訊 :ERROR 2003 (HY000): Can't connect to MySQL server on 'hostxxxxx' (

java連線MySQL資料庫常見故障問題的分析與解決

初學的mysql經常會碰到mysql無法連線的錯誤。收集的這樣問題的現象和原因。   歸納如下: 0.更改mysql root賬號密碼 mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpas

c#連線mysql資料庫 找不到或無法載入已註冊的 .Net Framework Data Provider

第一步:安裝驅動  mysql-connector-net-6.7.4.msi   第二步:根據你的專案版本複製mysql-connector-net-6.7.4 安裝目錄下對應版本的dll到專案的bin下的程式啟動目錄  debug 或者realse下面  比如4.

mysql】關於連線mysql資料庫出現的時區錯誤time zone

錯誤來源:mysql執行報The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or represents more than one time zone的解決方法 sql 命令結尾要加分後!!

jsp頁面寫入mysql資料庫漢字亂碼

自己在用jsp把中文寫入mysql的時候出現亂碼,原因很簡單就是編碼格式的問題。通過檢查和蒐集資料發現亂碼的原因主要分為以下幾類。 一.jsp頁面資料編碼格式 一般通過在頁面上方設定編碼格式即可,無需做過多的操作。(設定為UTF-8,GBK也可以,UTF-8幾乎支援所有國家的語言)

mac下的用idea配置jsp+tomcat連線mysql資料庫的環境

第一步 這裡假設IDEA和tomcat都以配置完成,僅差連線資料庫。 去這裡下載連線Mysql所需要的驅動程式mysql-connector-java-5.1.47-bin.jar。 第二步 下載完成後解壓獲取 並把它放在和tomcat伺服器的lib同一個資料夾下

Python連線MySQL資料庫執行sql語句的引數問題

由於工作需要,今天寫了一個Python小指令碼,其中需要連線MySQL資料庫,在執行sql命令時需要傳遞引數,結果出問題了。在網上查了一下,發現有以下幾種方式傳遞引數: 一.直接把sql查詢語句完整寫入字串 try: connection = MySQLdb.connect(user

JSP技術插入資訊到資料庫中文出現亂碼

資料庫插入中文時出現亂碼–JSP-在資料庫插入操作的時候資料庫中文出現亂碼的解決 這是我發表的第一篇類似於學習日記的文章,希望對遇到同樣困難的you有幫助。 最近學到的是用JSP實現商城的各種技術,目前是實現後臺商品資訊錄入資料庫的模組。類似新增商品的功能,就是用JSP技術去實現罷了。 好了

解決“在連線linux遠端伺服器上的mysql資料庫,報“Access denied for user 'root'@'ip地址'”問題”

在連線linux遠端伺服器上的mysql資料庫時,報“Access denied for user 'root'@'ip地址'”問題:1.mysql -u -root -p  輸入密碼2.mysql>grant all privileges on *.* to 'roo

解決C++連線MySQL資料庫插入和獲取記錄中文字元亂碼問題

字元編碼真是個頭痛的問題,以前一直不放在心上,現在用到了才發現真的麻煩。 花了將近一天的時間終於達到目的。 測試環境VS2015+MYSQL5.5,各種編碼的具體說明就不講了,自行百度。 1、讀取資料亂碼問題: vs專案下,預設編碼Unicode,但我的資料庫預設utf

JSP(MyEclipse)連線MySQL資料庫

學習了一段時間的jsp後,跟大家一起分享一下自己的心得,關於jsp如何連線MySQL,博主用的編輯器是MyEclipse。就用這個進行講解。 準備工作:MyEclipse,Navicat;連線兩者的驅動 1.在資料庫中建立資料庫和表。 1)連線到MySQL