表名:user_Info   
列名:Num,Name,Pwd,Role 分别表示:用户号,用户名,密码,角色
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="condb.condb" %>    //此处引入连接数据库包
<%
request.setCharacterEncoding("GBK");
String strUserName="";         
String strUserPwd="";
strUserName=request.getParameter("userId");  //得到登陆页传过来的用户号
strUserPwd=request.getParameter("userPwd");  //得到。用户密码
%><%
Connection con;
Statement st;
ResultSet rs;
String sql="select * from user_Info where Num='"+strUserName+"'";try{
con=condb.getConnection();  //连接数据库
st=con.createStatement();
rs=st.executeQuery(sql);
if(rs.next())    //查询此用户是否存在
 {
   if(rs.getString("Pwd").equals(strUserPwd))  //检查密码是否正确
    {
      out.print(rs.getString("Num"));
      out.print(rs.getString("Name"));
      out.print(rs.getString("Pwd"));
      out.print(rs.getString("Role"));
    }
 }
else
   {
      out.print("error!!!!!");
   }
st.close();
con.close();}catch(SQLException e)
{
}
%>出现错误:
只能输出用户号和用户名2个,还有密码和角色为什么不能输出来???
假如::
if(rs.getString("Pwd").equals(strUserPwd))  //检查密码是否正确
    {
      out.print(rs.getString("Num"));
      out.print(rs.getString("Name"));
      out.print(rs.getString("Pwd"));
      out.print(rs.getString("Role"));
    }
改为::
      out.print(rs.getString("Num"));
      out.print(rs.getString("Name"));
      out.print(rs.getString("Pwd"));
      out.print(rs.getString("Role"));
则输出4个结果,但是就不能验证密码了
初学  请指教。。

解决方案 »

  1.   

    改为:if(rs.next()) //查询此用户是否存在
    {
    String pwd = rs.getString("Pwd") ;
    String num = rs.getString("Num") ;
    String name = rs.getString("Pwd") ;
    String role = rs.getString("Role") ;if(pwd.equals(strUserPwd)) //检查密码是否正确
    {
    out.print(num);
    out.print(name);
    out.print(pwd);
    out.print(role);
    }
    ///////rs取一条记录时同一字段不能取两次,也就是同一记录的字段游标不能回溯
      

  2.   

    try{
    con=condb.getConnection();  //连接数据库
    st=con.createStatement();
    rs=st.executeQuery(sql);
    String s=rs.getString("Pwd");
    if(rs.next())    //查询此用户是否存在
     {
       if(s.equals(strUserPwd))  //检查密码是否正确
        {
          out.print(rs.getString("Num"));
          out.print(rs.getString("Name"));
          out.print(s);
          out.print(rs.getString("Role"));
        }
     }
    else
       {
          out.print("error!!!!!");
       }
    st.close();
    con.close();}catch(SQLException e)
    {
    }
    ////
    这样你试下看。。呵呵
      

  3.   

    问题就出在你这句话上
       if(rs.getString("Pwd").equals(strUserPwd))  //检查密码是否正确
        {
          out.print(rs.getString("Num"));
          out.print(rs.getString("Name"));
          out.print(rs.getString("Pwd"));
          out.print(rs.getString("Role"));
        }
    rs.next()游标会下移一个,rs.getString("Pwd")会在下移一个
      

  4.   

    if(rs.next()) //查询此用户是否存在String pwd = rs.getString("Pwd") ;
    String num = rs.getString("Num") ;
    String name = rs.getString("Name") ;
    String role = rs.getString("Role") ;1.上面的rs是不是相当于是一个游标,指向查询到的集合中的某一行(表中某元素)?
    2.还是rs指向的是表中某个列??也就是说可以这样写
    String pwd = rs.getString("Pwd") ;
    String num = rs.getString("Num") ;
    String name = rs.getString("Name") ;
    String role = rs.getString("Role") ;
    String ro= rs.getString("Role") ;
    假如此时候rs指向集合集的Pwd,Num,Name 3个列的同一行(第n行),难道在Role列中,rs就指向
    (n+1行)了吗?哪个正确呢?
      

  5.   

    if(rs.getString("Pwd").equals(strUserPwd))  //检查密码是否正确
        {
          out.print(rs.getString("Num"));
          out.print(rs.getString("Name"));
          out.print(rs.getString("Pwd"));
          out.print(rs.getString("Role"));
        }
    rs.next()游标会下移一个,rs.getString("Pwd")会在下移一个回复:
    rs.next()是判断游标rs的下一个是否为空的啊,怎么会下移一个???