做了一个登陆信息判断的页面,html的内容省去不发了,连接的是sqlserver2000数据库,后台是 WEBLOGIC.
用户在文本框txtZk,txtXm,txtSfz输入准考证,姓名,身份证,系统连接数据表根据txtZk的信息找到该条考生记录,读取表中考生的
姓名,身份证并与输入的姓名,身份证做比较.
问题是:我对页面输入的内容和数据库读出的内容都做了转码(gb2312),但是总显示姓名错误,或身份证错误,而我在做调试是把输入的姓名,身份证和数据表读取的姓名,身份证都显示在页面上,明明完全一致啊,弄了几天都不明白,郁闷死了.
<%@ page contentType="text/html;charset=gb2312"%> 
<%@ page import="java.sql.*"%> 
<% 
String tmpZk,tmpXm,tmpSfz,sql,errDesc,tmpKcdm,tmpKcmc,tmpCj,tmpSj;
int rowCount;
request.setCharacterEncoding("gb2312");
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); 
String url="jdbc:microsoft:sqlserver://localserver:1433;DatabaseName=zikaov2_archive"; 
String user="**"; 
String password="*******"; 
Connection conn= DriverManager.getConnection(url,user,password); 
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
errDesc="";
tmpZk="";
tmpXm="";
tmpSfz="";
if(request.getMethod().equals("POST")) {
tmpZk=request.getParameter("txtZk");
tmpZk=tmpZk.trim();
tmpXm=request.getParameter("txtXm");
tmpXm=tmpXm.trim();
tmpSfz=request.getParameter("txtSfz");
tmpSfz=tmpSfz.trim();
sql="select * from t_ks where ks_zkz='"+tmpZk+"'";
ResultSet rsKs=stmt.executeQuery(sql); 
rsKs.last();
rowCount=rsKs.getRow();
rsKs.first();
if (rowCount==0) { 
errDesc="无此记录";
}
else {
String ksXm=new String(rsKs.getString("ks_xm").getBytes("gb2312"));
String ksSfz=new String(rsKs.getString("ks_sfz").getBytes("gb2312"));
ksXm=ksXm.trim();
ksSfz=ksSfz.trim();
ksXm="adsfd";
if (ksXm!=tmpXm) { errDesc="姓名错误";}
//if (ksSfz!=tmpSfz) { errDesc="身份证错误"; }
}
out.print (errDesc+"<p>");
rsKs.close();
}
%>

解决方案 »

  1.   

    String 不能用 "="符号匹配  .
    用:"aa".equals("aa");//等于
    "aa".equalsIgnoreCase("aa");//不区分大小写 等于
    !"aa".equals("aa");//不等于
    !"aa".equalsIgnoreCase("aa");//....
      

  2.   


    正解!
    还有就是从数据库里取的值一般都多出来几个空格,和回车!建议做过滤!
    String ksXm=new String(rsKs.getString("ks_xm").toString().trim().getBytes("gb2312")); 
    String ksSfz=new String(rsKs.getString("ks_sfz").toString().trim().getBytes("gb2312"));