您的位置:首页 > 数据库 > MySQL

一种解决mySql数据库乱码的方法

2012-01-26 20:28 423 查看
首先在连接数据库时候指定使用的字符集

public static final String url = "jdbc:mysql://localhost:3306/comment?characterEncoding=UTF-8";
//这里非常关键,需要指定连接数据库的字符集,否则就是乱码


在表单提交是用POST方法,并且提交页面编码也是UTF-8;提交到Sevrlet中之后,用UTF-8读取,保证读取正确,然后写入。

//servlet中
request.setCharacterEncoding("UTF-8");


具体例子:

html 填写界面:

<!DOCTYPE html>
<html>
<head>
<title>write.html</title>

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">

<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

</head>

<body>
<br>

<form name="input" action="/comment/servlet/addContent" method="post">
name: <br /><input type="text" name="name" />
<br/><br/>
content:<br /><textarea rows="5" cols="40" name ="content"> </textarea>
<br /><input type="submit" value="提交" />
</form>

</body>
</html>


静态代码:

package info.dyndns.blog;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public final class Utility {
public static final String url = "jdbc:mysql://localhost:3306/comment?characterEncoding=UTF-8"; //这里非常关键,需要指定连接数据库的字符集,否则就是乱码
public static final String userName = "username1";
public static final String passWord = "password";

public static Connection getConn() throws SQLException
{
return DriverManager.getConnection(url,userName,passWord);
}

public static void free(Connection conn, Statement stat, ResultSet rs) {
if (rs != null)
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
finally{
if (stat != null)
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
finally{
if(conn != null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

}


处理添加的servlet:

package info.dyndns.blog;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class addContent extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

request.setCharacterEncoding("UTF-8");

Connection conn = null;
Statement stat = null;

String name = request.getParameter("name");
String content = request.getParameter("content");

try{
conn = Utility.getConn();
stat = conn.createStatement();
String sql =
"insert into say (name, content) values("+"'"+name+"'"+",'"+content+"'"+")";
stat.executeUpdate(sql);
}
catch(SQLException e){
e.printStackTrace();
}finally{
Utility.free(conn, stat, null);
response.sendRedirect("/comment/servlet/Display");
}

}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

doGet(request,response);
}

}


显示数据库数据的servlet:

package info.dyndns.blog;

import java.io.*;
import java.sql.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class Display extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

Connection conn = null;
Statement stat = null;
ResultSet rs = null;

response.setContentType("text/html;charset=utf-8");
PrintWriter pw = response.getWriter();
pw.print("<html><body>");

try{
conn = Utility.getConn();
stat = conn.createStatement();

String sql = "select * from say" ;

rs = stat.executeQuery(sql);

while(rs.next())
{
pw.println("<br />" + rs.getObject("name")+ " says:"+"<br />"+"    ");
pw.println("<br />" + rs.getObject("content"));
pw.print("<hr>");
}
pw.print("<br /><br /><a href='/comment/write.html'>回首页</a>");
}
catch(SQLException e){
e.printStackTrace();
}
finally{
Utility.free(conn, stat, rs);
pw.print("</body></html>");

}//end outside finally
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

doGet(request, response);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: