问题描述
我的index.jsp代码:<%@pagelanguage="java"import="java.util.*"pageEncoding="GB18030"%><%@pagecontentType="text/html;charset=GB2312"%><%Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><%@pageimport="java.sql.*"%><%@pageimport="java.lang.*"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><basehref="<%=basePath%>"><title>MyJSP'index.jsp'startingpage</title><metahttp-equiv="pragma"content="no-cache"><metahttp-equiv="cache-control"content="no-cache"><metahttp-equiv="expires"content="0"><metahttp-equiv="keywords"content="keyword1,keyword2,keyword3"><metahttp-equiv="description"content="Thisismypage"><!--<linkrel="stylesheet"type="text/css"href="styles.css">--></head><body>ThisismyJSPpage.<br><%Connectioncon;Statementsql;ResultSetre;try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundExceptione){}try{con=DriverManager.getConnection("jdbc:odbc:sun","sa","");sql=con.createStatement();re=sql.executeQuery("SELECT*FROMnamenum");//out.print(re.getObject(1));ResultSetMetaDatametaData=re.getMetaData();StringBufferresultBuffer=newStringBuffer();intcolNum=metaData.getColumnCount();//out.print(metaData.getColumnCount());for(inti=1;i<=colNum;i++){//out.println(metaData.getColumnName(i));resultBuffer.append(metaData.getColumnName(i)+"t");}resultBuffer.append("n");while(re.next()){for(inti=1;i<=colNum;i++){//out.println(metaData.getColumnName(i));resultBuffer.append(re.getObject(i)+"t");}resultBuffer.append("n");}out.print(resultBuffer);con.close();}catch(SQLExceptione){out.print("findexception");}%></body></html>浏览器中显示的内容是:ThisismyJSPpage.namenumage20012122193322我的数据库表结构是:namenumage张三121王五219李四322只有当name的类型改成int是才能显示,char,varchar,text都显示null,如下这样:ThisismyJSPpage.namenumagenull121null219null322在MySQL的命令行查询中能够完全显示,没有这样的问题。总是不明白哪里出了问题我用的是MyEclipse,建的webproject,tomcat7.0
解决方案
解决方案二:
re.getObject(i)改下试试如果是String类型re.getString(i)如果是int用rs.getInt具体类型用适合的东西试下应该是可以的
解决方案三:
没有人关注啊,亟待解决
解决方案四:
改成getString(i)之后不是null了,但汉字成乱码了,我查过我的MySQL的配置里面编码是gbk,default-character-set=gbk,jsp页面里用的也是gb2312啊,为什么还是乱码?
解决方案五:
估计是乱码的问题,所以没有显示出来,....
解决方案六:
引用3楼baencong的回复:
改成getString(i)之后不是null了,但汉字成乱码了,我查过我的MySQL的配置里面编码是gbk,default-character-set=gbk,jsp页面里用的也是gb2312啊,为什么还是乱码?
Java出来Stirng自己转下码啊你重新newString下就一行代码而已
解决方案七:
现在出了乱码了,就是怎么改过来的问题,我在jsp页面里加了几个汉字,能显示,在MySQL自己的查询里也能显示,就是jsp里查询显示不出来???
解决方案八:
<%@pagelanguage="java"import="java.util.*"pageEncoding="GB18030"%>你自己定义的JSP编码格式是GB18030数据库出来用newString自己在转换次编码啊
解决方案九:
直接说在哪里改吧,你是说Stringstr=newSting(resultBuffer);?然后呢怎么转换编码?
解决方案十:
<%@pagelanguage="java"import="java.util.*"pageEncoding="GB18030"%>改成<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>的格式
解决方案十一:
引用9楼ke922的回复:
<%@pagelanguage="java"import="java.util.*"pageEncoding="GB18030"%>改成<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>的格式
这个真不行.
解决方案十二:
引用8楼baencong的回复:
直接说在哪里改吧,你是说Stringstr=newSting(resultBuffer);?然后呢怎么转换编码?
Stringstr=newSting(str.getBytes("ISO-8859-1"),"GB2312")如果不行将ISO-8859-1改成UTF-8或者GBK试试看
解决方案十三:
Stringstr=re.getString(i)Stringstr1=newSting(str.getBytes("ISO-8859-1"),"GB2312")
解决方案十四:
newString("要转换的字符串","指定的字符编码");
解决方案十五:
引用11楼cjg520jie的回复:
引用8楼baencong的回复:直接说在哪里改吧,你是说Stringstr=newSting(resultBuffer);?然后呢怎么转换编码?Stringstr=newSting(str.getBytes("ISO-8859-1"),"GB2312")如果不行将ISO-8859-1改成UTF-8或者GBK试试看
改的这些都不行,还是乱码,数据表的名字改成字母就能显示,看来还是编码的问题,就是不知道哪里出了问题
解决方案:
publicclassTool{publicstaticStringtoChinessString(Stringname){try{name=newString(name.getBytes("iso-8859-1"));}catch(UnsupportedEncodingExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();return"";}returnname;}}然后str=Tool.toChinessString(str);
解决方案:
url="jdbc:mysql://127.0.0.1/mydatabase?user=username&password=password&useUnicode=true&characterEncoding=UTF-8";while(rs.next()){Mapmap=newHashMap();for(inti=1;i<=rsmd.getColumnCount();i++){if(rsmd.getColumnTypeName(i).equals("text")){StringBuffersbf=newStringBuffer();java.io.InputStreamins=rs.getAsciiStream(i);intch=0;if(ins!=null){try{while((ch=ins.read())!=-1){sbf.append((char)ch);}ins.close();map.put(rsmd.getColumnName(i),newString(sbf.toString().getBytes("8859_1"),"GB2312"));}catch(IOExceptionioe){thrownewException(this.getClass().getName()+":_eexecuteQuery(finalStringsql,finalListparams):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的,这是我的代码,运行没有问题,希望能帮你解决问题。