国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JSP > 正文

JSP連接MySQL數(shù)據(jù)庫(kù)時(shí)中文編碼問(wèn)題解決方法

2024-09-05 00:08:43
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

當(dāng)我們用JDBC或者數(shù)據(jù)源,從數(shù)據(jù)庫(kù)中提取數(shù)據(jù)的時(shí)候,往往會(huì)出現(xiàn)亂碼問(wèn)題。這主要是因?yàn)槲覀兪褂玫臄?shù)據(jù)庫(kù)編碼可能與我們網(wǎng)頁(yè)使用的編碼不一致,導(dǎo)致我們從數(shù)據(jù)庫(kù)中提取的數(shù)據(jù)在網(wǎng)頁(yè)中顯示出來(lái)的是亂碼。

我的運(yùn)行環(huán)境仍然是eclipse3.2_Callisto+jdk1.5.0_03+Tomcat v5.5

 數(shù)據(jù)庫(kù)選用的是MySQL 4.1

 出現(xiàn)這種現(xiàn)象的原因是:

 我使用的MySQL的JDBC的驅(qū)動(dòng)程序是mysqldrover.jar,這種驅(qū)動(dòng)程序默認(rèn)的情況下采用的是ISO-8859-1編碼。

 google一下,得知ISO/IEC 8859-1,又稱Latin-1或“西歐語(yǔ)言”,是國(guó)際標(biāo)準(zhǔn)化組織內(nèi)ISO/IEC 8859的第一個(gè)8位字符集。它以ASCII為基礎(chǔ),在空置的0xA0-0xFF的范圍內(nèi),加入192個(gè)字母及符號(hào),藉以供使用變音符號(hào)的拉丁字母語(yǔ)言使用。顯然這種編碼不適合中國(guó)字。

 所以我們可以采用這種方法得到中文。

 舉個(gè)例子:

 我們可以先用MySQL創(chuàng)建一個(gè)數(shù)據(jù)庫(kù):

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, ’讓讀者輕輕松松掌握J(rèn)ava語(yǔ)言', 1000);
INSERT INTO books VALUES(’202’, '張丙', 'Weblogic技術(shù)參考', 45.99, 2002, ’真的不錯(cuò)耶', 2000);
INSERT INTO books VALUES(’203’, '孫艷', 'Oracle數(shù)據(jù)庫(kù)教程', 40, 2003, ’關(guān)于Oracle的最暢銷的技術(shù)書', 2000);
INSERT INTO books VALUES(’204’, '大衛(wèi)', '從Oak到Java: 語(yǔ)言的革命', 20.75, 1998, ’很值得一看', 2000);
INSERT INTO books VALUES(’205’, '阿明', 'Apache從入門到精通', 50.75, 2002, ’權(quán)威的Apache技術(shù)資料', 2000);
INSERT INTO books VALUES(’206’, '洪軍', 'Java與數(shù)據(jù)算法', 54.75, 2002, ’權(quán)威的Java技術(shù)資料', 2000);

接著我們就可以做一個(gè)簡(jiǎn)單的JSP文件來(lái)查詢我們的BookDB了

取名為Dbjsp.jsp

<!--首先導(dǎo)入一些必要的packages-->
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<!--告訴編譯器使用SQL包-->
<%@ page import="java.sql.*"%>
<!--設(shè)置中文輸出-->
<%@ 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;
//加載驅(qū)動(dòng)程序,下面的代碼為加載MySQL驅(qū)動(dòng)程序
Class.forName("com.mysql.jdbc.Driver");
//注冊(cè)MySQL驅(qū)動(dòng)程序
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//用適當(dāng)?shù)尿?qū)動(dòng)程序連接到數(shù)據(jù)庫(kù)
String dbUrl =  "jdbc:mysql://localhost:3306/BookDB?useUnicode=true&characterEncoding=GB2312";
String dbUser="root";
String dbPwd="1234";
//建立數(shù)據(jù)庫(kù)連接
con = java.sql.DriverManager.getConnection(dbUrl,dbUser,dbPwd);
//創(chuàng)建一個(gè)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");
//輸出查詢結(jié)果
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");
//打印所顯示的數(shù)據(jù)
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’");
//關(guān)閉數(shù)據(jù)庫(kù)連結(jié)
rs.close();
stmt.close();
con.close();
}
//捕獲錯(cuò)誤信息
catch (Exception e) {out.println(e.getMessage());}
%>
</body>
</html>

對(duì)了,關(guān)鍵的地方就在于紅色的代碼部分。第一個(gè)紅色部分用來(lái)在連接

數(shù)據(jù)庫(kù)的URL時(shí)就指定好字符編碼

為了保險(xiǎn)起見(jiàn),我們?cè)谕W(wǎng)頁(yè)上輸出時(shí),即第二部分紅色代碼部分。

這個(gè)主要是當(dāng)我們知道JDBC使用的字符編碼時(shí),我們可以把數(shù)據(jù)庫(kù)中的字符提取出來(lái)的時(shí)候強(qiáng)制轉(zhuǎn)換為我們想要的比如GB2312

OK這樣就可以確保我們解決中文字符的輸出問(wèn)題了!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 英吉沙县| 安国市| 长治县| 舒兰市| 沐川县| 锡林浩特市| 勐海县| 靖宇县| 福鼎市| 习水县| 阜康市| 凌源市| 渑池县| 富蕴县| 朝阳市| 宜章县| 墨竹工卡县| 宁陵县| 云安县| 拜城县| 阜康市| 内黄县| 厦门市| 肇州县| 楚雄市| 邯郸市| 博白县| 寿宁县| 汉中市| 磴口县| 周宁县| 宁德市| 昌都县| 临夏县| 高台县| 托里县| 芜湖市| 禄劝| 晴隆县| 青川县| 错那县|