代码信息:
 <body>
 <%String name=request.getParameter("name");
   ResultSet rs=members.queryLogin("name");
   if(rs==null){out.println("数据查询失败");}
   else
   {
   out.println(rs.getString("password"));   } 
   rs.close();
   %>
   </body>
错误信息:HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: Exception in JSP: /success.jsp:118:    if(rs==null){out.println("数据查询失败");}
9:    else
10:    {
11:    out.println(rs.getString("password"));12:    } 
13:    rs.close();
14:    %>
问题:如果将红色部分换成out.println("XXX");可以正常输入。证明流程走的是else,也就是rs查询到了数据,查询数据没有问题。  但是为什么想显示具体字段是就出错呢?

解决方案 »

  1.   

    你获取到ResultSet rs的时候,如果rs里面至多一行数据,首先执行r.next(),你试下换成下面的代码如何   if(rs==null){out.println("数据查询失败");}
    9: else
    10: {
          rs.next();
    11: out.println(rs.getString("password"));
    12: }  
    13: rs.close();
    14: %>
      

  2.   

    要注意 ResultSet 的基本用法:
    while(rs.next()){
       String p = rs.getString("password");
       ...
    }rs.next()是必需的!!!
      

  3.   

    while(rs.next()){
    String strs[] = new String[cols];
    for(int i=1;i<=cols;i++){

    strs[i-1]=rs.getString(i);
    }
    ls.add(strs);
    }这样遍历吧
      

  4.   

    这种做法对Statement也有要求。
      

  5.   

    确定只有一条,可以使用
    if(rs.next()!=null){    
          String password = rs.getString("password");      
    }
      

  6.   

    应该就是这个原因.
    先 rs.next()
      

  7.   


    这个写法才是标准的。rs.next()出了判断时候有下一行外,同时还在操作游标。
      

  8.   

    这层楼的说滴很对啊
    “rs.next()是必需的!!!”
      

  9.   

    应该是
    if(rs.next()){
    out.print(rs.getString("password"));
    }else{
    }rs.close();