我真是很想把这个问题搞定。数据库乱码,我用的是TOMCAT+MSSQL2000
我在JSP页面写入数据库再显示出来,数据库中的中文出现“????”的乱码,显示出来的页面也是“????”的乱码。
我这个是书上的例子,用一个JAVABEAN+JSP没有用SERVLET来向数据库中写入数据,再显示出来。
有三个文件:main.jsp/inquireOne.jsp/QueryBeanOne.java 数据库中:
我输入:sp_helpsort,
出现的是:Chinese-PRC, case-insensitive, accent-sensitive, kanatype-insensitive, width-insensitive
其它的都是默认设置。
我的JSP页面都是用的BG2312码,我的三个文件是:
main.jsp
<%@ page contentType="text/html; charset=gb2312" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head><body>
<h5> 使用ODBC数据源连接、查询数据库</h5>
<form action="inquireOne.jsp" method="post">
<br/>输入ODBC数据源的名字:
<Input type=text name="ODBCDataSource" value="mymoon" size=8>输入表的名字
<Input type=text name="tableName" value="score" size=8><br/>输入用户名称
<Input type=text name="user" size=6>输入密码:
<Input type=text name="secret" size=6><br/>
输入插入学号:<Input type=text name="sno" size=16>姓名:<Input type=text name="name" size=8>文件:<Input type=text name="file" size=16><br/>
<Input type=submit name="g" value="提交">
</form>
</body>
</html>
inquireOne.jsp
<%@ page contentType="text/html; charset=gb2312" %>
<%@page import="tom.QueryBeanOne"%>
<jsp:useBean id="database" class="tom.QueryBeanOne" scope="request"/>
<jsp:setProperty name="database" property="*"/>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head><body>
<jsp:getProperty name="database" property="tableName"/>表查询到记录<br/>
<% out.println(database.getQueryResult());
%>
</body>
</html>
QueryBeanOne.java
package tom;
import java.io.UnsupportedEncodingException;
import java.sql.*;
public class QueryBeanOne {
String ODBCDataSource="";
String tableName="";
String user="";
String secret="";
String queryResult="";
String sno=null;
String name="";
String file="";
public QueryBeanOne(){
StringBuffer queryResult = new StringBuffer();
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){
queryResult=new StringBuffer();
queryResult.append(" "+e);
}
}
public void setODBCDataSource(String s){
ODBCDataSource = s.trim();
}
public String getODBCDataSource(){
return ODBCDataSource;
}
public void setTableName(String s){
tableName=s.trim();
}
public String getTableName(){
return tableName;
}
public void setSecret(String s){
secret=s.trim();
}
public String getSecret(){
return secret;
}
public void setUser(String s){
user=s.trim();
}
public String getUser(){
return user;
}
public void setSno(String s){
sno= s.trim();
}
public void setName(String s){
String str = null;
try {
str = new String(s.getBytes("GB2312"),"ISO-8859-1");
} catch (Exception e) {
e.printStackTrace();
}
name= str.trim();
}
public void setFile(String s){
file= s.trim();
}
public String getQueryResult(){
Connection con;
Statement sql;
ResultSet rs =null;
String source;
String id;
String password;
try{ queryResult=queryResult+"<table border=1>";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
source="jdbc:odbc:"+ODBCDataSource;
id=user;
password=secret;
con=DriverManager.getConnection(source,id,password);
DatabaseMetaData metadata=con.getMetaData();
ResultSet rs1=metadata.getColumns(null, null,tableName, null);
queryResult=queryResult+"<tr>";
while(rs1.next()){
String clumnName=rs1.getString(4);
queryResult=queryResult+"<td>"+clumnName+"</td>";
}
queryResult=queryResult+"</tr>";
sql=con.createStatement();
//name=name.getBytes("ISO-8859-1").toString();
//String aa = (String)request.getParameter("str");
// String bb = new String(aa.getBytes("iso-8859-1"),"GBK");
if(sno!=null)
{
id="select * from score where 学号='"+sno+"'";
rs=sql.executeQuery(id);
if(rs.next())
queryResult=queryResult+"<tr><td>"+sno+"重复已存在!"+"</td></tr>";
else
{
id="insert into score values('"+sno+"',N'"+name+"','"+file+"')";
sql.executeUpdate(id);
}
}
id="select * from score";
rs=sql.executeQuery(id);
while(rs.next()){
queryResult=queryResult+"<tr>";
for(int k=1;k<=3;k++){
//alter database dbname collate Chinese_PRC_CI_AS
//gb = new String(iso.getBytes("ISO-8859-1"),"GB2312");
//new String(rs.getString(1).getBytes("ISO8859-1"));
queryResult=queryResult+"<td>"+rs.getString(k)+"</td>";
}
queryResult=queryResult+"</tr>";
}
queryResult=queryResult+"</table>";
con.close();
}catch(Exception e){
queryResult=queryResult+e; }
return queryResult;
}
}
**************************************************************
大家一定要救救我啊。自学做毕业设计。。断肠人在CSDN求救。。
我在JSP页面写入数据库再显示出来,数据库中的中文出现“????”的乱码,显示出来的页面也是“????”的乱码。
我这个是书上的例子,用一个JAVABEAN+JSP没有用SERVLET来向数据库中写入数据,再显示出来。
有三个文件:main.jsp/inquireOne.jsp/QueryBeanOne.java 数据库中:
我输入:sp_helpsort,
出现的是:Chinese-PRC, case-insensitive, accent-sensitive, kanatype-insensitive, width-insensitive
其它的都是默认设置。
我的JSP页面都是用的BG2312码,我的三个文件是:
main.jsp
<%@ page contentType="text/html; charset=gb2312" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head><body>
<h5> 使用ODBC数据源连接、查询数据库</h5>
<form action="inquireOne.jsp" method="post">
<br/>输入ODBC数据源的名字:
<Input type=text name="ODBCDataSource" value="mymoon" size=8>输入表的名字
<Input type=text name="tableName" value="score" size=8><br/>输入用户名称
<Input type=text name="user" size=6>输入密码:
<Input type=text name="secret" size=6><br/>
输入插入学号:<Input type=text name="sno" size=16>姓名:<Input type=text name="name" size=8>文件:<Input type=text name="file" size=16><br/>
<Input type=submit name="g" value="提交">
</form>
</body>
</html>
inquireOne.jsp
<%@ page contentType="text/html; charset=gb2312" %>
<%@page import="tom.QueryBeanOne"%>
<jsp:useBean id="database" class="tom.QueryBeanOne" scope="request"/>
<jsp:setProperty name="database" property="*"/>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head><body>
<jsp:getProperty name="database" property="tableName"/>表查询到记录<br/>
<% out.println(database.getQueryResult());
%>
</body>
</html>
QueryBeanOne.java
package tom;
import java.io.UnsupportedEncodingException;
import java.sql.*;
public class QueryBeanOne {
String ODBCDataSource="";
String tableName="";
String user="";
String secret="";
String queryResult="";
String sno=null;
String name="";
String file="";
public QueryBeanOne(){
StringBuffer queryResult = new StringBuffer();
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){
queryResult=new StringBuffer();
queryResult.append(" "+e);
}
}
public void setODBCDataSource(String s){
ODBCDataSource = s.trim();
}
public String getODBCDataSource(){
return ODBCDataSource;
}
public void setTableName(String s){
tableName=s.trim();
}
public String getTableName(){
return tableName;
}
public void setSecret(String s){
secret=s.trim();
}
public String getSecret(){
return secret;
}
public void setUser(String s){
user=s.trim();
}
public String getUser(){
return user;
}
public void setSno(String s){
sno= s.trim();
}
public void setName(String s){
String str = null;
try {
str = new String(s.getBytes("GB2312"),"ISO-8859-1");
} catch (Exception e) {
e.printStackTrace();
}
name= str.trim();
}
public void setFile(String s){
file= s.trim();
}
public String getQueryResult(){
Connection con;
Statement sql;
ResultSet rs =null;
String source;
String id;
String password;
try{ queryResult=queryResult+"<table border=1>";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
source="jdbc:odbc:"+ODBCDataSource;
id=user;
password=secret;
con=DriverManager.getConnection(source,id,password);
DatabaseMetaData metadata=con.getMetaData();
ResultSet rs1=metadata.getColumns(null, null,tableName, null);
queryResult=queryResult+"<tr>";
while(rs1.next()){
String clumnName=rs1.getString(4);
queryResult=queryResult+"<td>"+clumnName+"</td>";
}
queryResult=queryResult+"</tr>";
sql=con.createStatement();
//name=name.getBytes("ISO-8859-1").toString();
//String aa = (String)request.getParameter("str");
// String bb = new String(aa.getBytes("iso-8859-1"),"GBK");
if(sno!=null)
{
id="select * from score where 学号='"+sno+"'";
rs=sql.executeQuery(id);
if(rs.next())
queryResult=queryResult+"<tr><td>"+sno+"重复已存在!"+"</td></tr>";
else
{
id="insert into score values('"+sno+"',N'"+name+"','"+file+"')";
sql.executeUpdate(id);
}
}
id="select * from score";
rs=sql.executeQuery(id);
while(rs.next()){
queryResult=queryResult+"<tr>";
for(int k=1;k<=3;k++){
//alter database dbname collate Chinese_PRC_CI_AS
//gb = new String(iso.getBytes("ISO-8859-1"),"GB2312");
//new String(rs.getString(1).getBytes("ISO8859-1"));
queryResult=queryResult+"<td>"+rs.getString(k)+"</td>";
}
queryResult=queryResult+"</tr>";
}
queryResult=queryResult+"</table>";
con.close();
}catch(Exception e){
queryResult=queryResult+e; }
return queryResult;
}
}
**************************************************************
大家一定要救救我啊。自学做毕业设计。。断肠人在CSDN求救。。
解决方案 »
- 关于Spring依赖注入的原理
- 求日期与十六进制如何实现转换?
- 还是checkbox的问题。怎么在ACCESS中批删数据?看不懂
- 大家想为自己J2EE的应用找一个Internet上的发布平台吗?有一个好去处哦!
- jsp 能不能做动态新闻,
- tomcat 关闭不了,何解?
- 如何判断字符为空?
- 兄弟我初学weblogic,希望大侠指点,有愿意帮忙的,小弟不胜感谢,我的QQ:11825772
- 公司内部小小项目,服务器 硬件配置选择问题?
- 惨了,公司的javaweb项目要求在页面上播放mid格式,咋整?
- java hibernate 继承映射 每个具体类映射成一张表怎样自动生成主键
- 为什么我的查询语句出错?
其次,检查数据库的配置,mysql默认的编码是latian 你重新配置一下,改成utf-8.
这块你没处理乱码 当然插进去就是乱码了
就是写入不正常。为什么??
但写入的时候,不管我怎么折腾都是乱码。
是不是只对SERVLET有用?
http://blog.csdn.net/crazylaa/archive/2009/12/24/5066784.aspx