JSP+INFORMIX中文查询显示

1.数据库环境:

系统/数据库版本:rhel4.7+ids11.50uc5
informix用户环境:

    INFORMIXDIR=/opt/informix; export INFORMIXDIR
    INFORMIXSERVER=ids11_online_net; export INFORMIXSERVER
    ONCONFIG=onconfig; export ONCONFIG
    PATH=${PATH}:${INFORMIXDIR}/bin; export PATH
    LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${INFORMIXDIR}/lib:${INFORMIXDIR}/lib/esql; export LD_LIBRARY_PATH
    LANG=zh_CN.gb; export LANG
    DBLANG=zh_CN.gb; export DBLANG
    DB_LOCALE=zh_CN.gb; export DB_LOCALE
    SERVER_LOCALE=zh_CN.gb; export SERVER_LOCALE 
    CLIENT_LOCALE=zh_CN.gb; export CLIENT_LOCALE

测试表:
建立一个名为dbmon的库,建立表 t1 (id char(10),name char(10),info char(20));
导入数据

001        测试1      测试001测
002        test2     test002tes
003        测试工3    测试小幅3 

2.JSP环境:

系统/web环境:windows xp+tomcat5.0+jdk1.4.2+jdbc3.00jc3
测试jsp文件

t3.jsp

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>中文字符传送查询</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="t4.jsp">
  <label>查询条件
  <input type="text" name="sname" />
  </label>
  <label>
  <input type="submit" name="Submit" value="提交" />
  </label>
</form>
</body>
</html>

t4.jsp

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>中文字符接收查询数据库</title>
</head>
<%
String sname = new String(request.getParameter("sname").getBytes("ISO-8859-1"));
//String sname = request.getParameter("sname")
//String sname = request.getParameterNames("sname")
//byte[] tmpbyte = sname.getBytes("ISO-8859-1"); 
//sname = new String(tmpbyte);
%>
<%= sname %>
<%
Class.forName("com.informix.jdbc.IfxDriver").newInstance(); 
String url = "jdbc:informix-sqli://192.168.80.120:9122/dbmon:INFORMIXSERVER=ids11_online_net;user=informix;password=informix";
//testDB为你的数据库名 

Connection conn= DriverManager.getConnection(url); 
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

String sql="select * from t1 where name='"+sname+"';";

ResultSet rs=stmt.executeQuery(sql); 
while(rs.next()) { %> 
您的第一个字段内容为:<%= rs.getString(1) %> 
您的第二个字段内容为:<%= rs.getString(2) %> 
您的第三个字段内容为:<%= rs.getString(3) %>
<% } %> 
<% out.print("数据库操作成功,恭喜你"); %> 
<%rs.close(); 
stmt.close(); 
conn.close(); 
%>  
<body>
</body>
</html>

3.结果:从t3传送中文到t4的结果正确,从t4通过jdbc连接到数据库查询返回结果正常.

请输入图片描述
请输入图片描述

4.分析:

1)从t3.jsp传中含中文的变量值到t4.jsp,使用了getBypes("ISO-8859-1"),因为默认的传送使用的是IS0-8859-1的编码模式,需要转换成当前编码.

String sname = new String(request.getParameter("sname").getBytes("ISO-8859-1"));  

2)数据库环境为中文zh_CN.gb,以支持中文查询.

以上仅为本次测试分析.

标签: none

添加新评论

Free Web Hosting