JSP+INFORMIX中文查询显示
1.数据库环境:
系统/数据库版本:rhel4.7+ids11.50uc5
informix用户环境:
1 2 3 4 5 6 7 8 9 10 | INFORMIXDIR=/opt/informix; export INFORMIXDIRINFORMIXSERVER=ids11_online_net; export INFORMIXSERVERONCONFIG=onconfig; export ONCONFIGPATH=${PATH}:${INFORMIXDIR}/bin; export PATHLD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${INFORMIXDIR}/lib:${INFORMIXDIR}/lib/esql; export LD_LIBRARY_PATHLANG=zh_CN.gb; export LANGDBLANG=zh_CN.gb; export DBLANGDB_LOCALE=zh_CN.gb; export DB_LOCALESERVER_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));
导入数据
1 2 3 | 001 测试1 测试001测002 test2 test002tes003 测试工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,以支持中文查询.
以上仅为本次测试分析.