String u=request.getParameter("username");
        String p=request.getParameter("passwd");
        Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=stuinfo","sa","123");
Statement sm=ct.createStatement();
ResultSet  rs=sm.executeQuery("select userId from userInfo where userName='"+u+"'");         if(rs.next()){           
         //用户名存在
        if(rs.getString(1).equals(p)){
                    //合法用户    
               response.sendRedirect("wel.jsp");
             }else{
                 //不合法用户
                    response.sendRedirect("login.jsp?error=1");
              }
这是我的用户表                          
001        chengge   
002        chengge2  
003        chengge3  当我输入用户名为chengge  密码为001  时为什么会跳转到("login.jsp?error=1");?
如果把if(rs.getString(1).equals(p)){
改成if(p.equals("001"))就能跳转到("wel.jsp");
(难道是if(rs.getString(1).equals(p))这句有问题??求解)

解决方案 »

  1.   

    肯定是p有问题,把它打印出来,也顺便把它的length打印出来比对一下看看。
      

  2.   

    我觉得是你的sql写的有问题 
    equal不会错的
      

  3.   

    如果u为chengge时,,在sql中能查出001这个结果。。
      

  4.   

      equal应该没有问题  你可以打印下 rs.getString(1)的值是不是001 
      

  5.   

    既然楼主说p.equles("001")是正确的那么只能是数据库中得到的001包含空格了.
    那就使用if(rs.getString(1).trim().equals(p.trim())){}
      

  6.   

    CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。char型的会用空字符来填满的!链接是:http://hi.baidu.com/questl/blog/item/40ee08855d593d26c65cc351.html