我的index.jsp代码:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ page contentType="text/html; charset=GB2312" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><%@ page import="java.sql.*" %>
<%@ page import="java.lang.*" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
This is my JSP page. <br>
<%
Connection con;
Statement sql;
ResultSet re;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){}
try{
con=DriverManager.getConnection("jdbc:odbc:sun","sa","");
sql=con.createStatement();
re=sql.executeQuery("SELECT * FROM namenum");
//out.print(re.getObject(1));
ResultSetMetaData metaData=re.getMetaData();
StringBuffer resultBuffer=new StringBuffer();
int colNum=metaData.getColumnCount();
//out.print(metaData.getColumnCount());
for(int i=1;i<=colNum;i++){
//out.println(metaData.getColumnName(i));
resultBuffer.append(metaData.getColumnName(i)+"\t");
}
resultBuffer.append("\n");
while(re.next()){
for(int i=1;i<=colNum;i++){
//out.println(metaData.getColumnName(i));
resultBuffer.append(re.getObject(i)+"\t");
}
resultBuffer.append("\n");
}
out.print(resultBuffer);
con.close();
}catch(SQLException e){out.print("findexception");}
%>
</body>
</html>
浏览器中显示的内容是:
This is my JSP page.
name num age 200 1 21 2 2 19 3 3 22
我的数据库表结构是:
name num age
张三 1 21
王五 2 19
李四 3 22
只有当name的类型改成int是才能显示,char,varchar,text都显示null,如下这样:
This is my JSP page.
name num age null 1 21 null 2 19 null 3 22
在MySQL的命令行查询中能够完全显示,没有这样的问题。
总是不明白哪里出了问题
我用的是MyEclipse,建的webproject,tomcat7.0
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ page contentType="text/html; charset=GB2312" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><%@ page import="java.sql.*" %>
<%@ page import="java.lang.*" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
This is my JSP page. <br>
<%
Connection con;
Statement sql;
ResultSet re;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException e){}
try{
con=DriverManager.getConnection("jdbc:odbc:sun","sa","");
sql=con.createStatement();
re=sql.executeQuery("SELECT * FROM namenum");
//out.print(re.getObject(1));
ResultSetMetaData metaData=re.getMetaData();
StringBuffer resultBuffer=new StringBuffer();
int colNum=metaData.getColumnCount();
//out.print(metaData.getColumnCount());
for(int i=1;i<=colNum;i++){
//out.println(metaData.getColumnName(i));
resultBuffer.append(metaData.getColumnName(i)+"\t");
}
resultBuffer.append("\n");
while(re.next()){
for(int i=1;i<=colNum;i++){
//out.println(metaData.getColumnName(i));
resultBuffer.append(re.getObject(i)+"\t");
}
resultBuffer.append("\n");
}
out.print(resultBuffer);
con.close();
}catch(SQLException e){out.print("findexception");}
%>
</body>
</html>
浏览器中显示的内容是:
This is my JSP page.
name num age 200 1 21 2 2 19 3 3 22
我的数据库表结构是:
name num age
张三 1 21
王五 2 19
李四 3 22
只有当name的类型改成int是才能显示,char,varchar,text都显示null,如下这样:
This is my JSP page.
name num age null 1 21 null 2 19 null 3 22
在MySQL的命令行查询中能够完全显示,没有这样的问题。
总是不明白哪里出了问题
我用的是MyEclipse,建的webproject,tomcat7.0
你自己定义的JSP编码格式是GB18030 数据库出来用new String 自己在转换次编码啊
改成<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>的格式
String str=new Sting(str.getBytes("ISO-8859-1"),"GB2312")
如果不行 将ISO-8859-1 改成UTF-8或者GBK试试看
String str1=new Sting(str.getBytes("ISO-8859-1"),"GB2312")
public static String toChinessString(String name)
{
try {
name=new String(name.getBytes("iso-8859-1"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "";
}
return name;
}}
然后str=Tool.toChinessString(str);
Map map = new HashMap();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
if (rsmd.getColumnTypeName(i).equals("text")) {
StringBuffer sbf = new StringBuffer();
java.io.InputStream ins = rs.getAsciiStream(i);
int ch = 0;
if (ins != null) {
try {
while ((ch = ins.read()) != -1) {
sbf.append((char) ch);
}
ins.close();
map.put(rsmd.getColumnName(i), new String(sbf.toString().getBytes("8859_1"), "GB2312"));
} catch (IOException ioe) {
throw new Exception(this.getClass().getName() + ":_eexecuteQuery(final String sql, final List params):pstmt.executeQuery()失败。IOException错误信息:" + ioe.getMessage() + "。sql:" + sql);
}
} else {
map.put(rsmd.getColumnName(i), null);
}
} else {
map.put(rsmd.getColumnName(i), rs.getObject(i));
}
}
getListResult().add(map);
}mysql的字符集也设置成utf8的,这是我的代码,运行没有问题,希望能帮你解决问题。