昨天发贴问题没有解决,今天再发希望能够解决
初学JSP有许多问题不懂,最近就有一个做登录的,在javabean中定义了两个类
public class ConnUtil {
    public static Connection getuser() {
        Connection conn = null;
        try {
            String url = "jdbc:odbc:news";
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            conn = DriverManager.getConnection(url, "", "");
        } catch (Exception e) {            System.out.print(e.toString());
        }
        return conn;
    }    public static void closeConnection(Connection conn) {
        try {
            conn.close();
        } catch (Exception e) {
            System.out.println(e.toString());
        }
    }
}
还有一个查询表的
public class UserDenglu {
    Connection conn = ConnUtil.getuser();
          public ResultSet getdentlu(Connection conn, HttpServletRequest request) {
      ResultSet rs = null;
        try {
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            Statement smt = conn.createStatement();
            String sql = "select username,password from usersdenglu where username='"+username+"'";
                 sql+= "and password='"+password+"'";
            smt.executeQuery(sql);
            System.out.println(sql);
        } catch (Exception e) {
            System.out.println(e.toString());
        }
        return rs;
    }
在页面中这样调用:
<%
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    request.setCharacterEncoding("gb2312");
    Connection conn = ConnUtil.getuser();
    UserDenglu bean = new UserDenglu();
    ResultSet rs = bean.getdentlu(conn, request);
       if(rs.getString("Username")!=null && rs.getString("password")!=null){
        if (rs.next()) {
            session.setAttribute("username", username);
            session.setAttribute("password", password);
            response.sendRedirect("homepage.jsp");
        }
       } else {
        out.print("<script language=javascript>alert('用户名或密码错误!')");
    }
%>
但是运行时说第一个if语句哪儿有问题;真的不知道怎么解决,麻烦各位高手帮忙看一下,是哪儿错呢?在下不胜感激,从控制台输出的SQL语句都是空值;麻烦各位解决;
我用的是access数据库,数据源名在上面已经定义,问题解决马上结贴

解决方案 »

  1.   

    参考贴子http://community.csdn.net/Expert/topic/5596/5596580.xml?temp=.5880701
      

  2.   

    写错了,应该是rs=smt.executeQuery(sql);
      

  3.   

    rs.getString之前必须要rs.next()且判断返回值是否为true
      

  4.   

    首先你要确定查询表是否写在一个Servlet类里面,只有写在Servlet里的doGet()方法里才能接收的到传过来的值。
    再就是,是否传过来的键值写错了,请检查一下。不过看你的样子好像没有用到Servlet,建议还是在Servlet里面调用Bean吧。
      

  5.   

    rs.getString之前必须要rs.next()且判断返回值是否为true怎样判断,麻烦改一下代码,我不是很懂
      

  6.   

    smt.executeQuery(sql);有返回值,你没接受。
      

  7.   

    class改一下:
    public class UserDenglu {
        Connection conn = ConnUtil.getuser(); //这个不要,不然会出现连数据库2次。
              public ResultSet getdentlu(Connection conn, HttpServletRequest request) {
          ResultSet rs = null;
            try {
                String username = request.getParameter("username");
                String password = request.getParameter("password");
                Statement smt = conn.createStatement();
                String sql = "select username,password from usersdenglu where username='"+username+"'";
                     sql+= "and password='"+password+"'";
                smt.executeQuery(sql);//这里改为:rs = smt.executeQuery(sql);
                System.out.println(sql);
            } catch (Exception e) {
                System.out.println(e.toString());
            }
            return rs;
        }
      

  8.   

    ******************* "Username" && "password" 大小写正确否
    if(rs.getString("Username")!=null && rs.getString("password")!=null){
            if (rs.next()) {
                session.setAttribute("username", username);
                session.setAttribute("password", password);
                response.sendRedirect("homepage.jsp");
            }
           } else {
            out.print("<script language=javascript>alert('用户名或密码错误!')");
        }
      

  9.   

    数据库连接有错误!
    access数据库直连用ODBC用这种模式:Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
    String url="jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ="+application.getRealPath("/Data/ReportDemo.mdb");
    Connection conn = DriverManager.getConnection(url,"","");
    Statement stmtNew=conn.createStatement() ;
      

  10.   

    while (rs.next()) {
            if(rs.getString("Username")!=null && rs.getString("password")!=null){
                session.setAttribute("username", username);
                session.setAttribute("password", password);
                response.sendRedirect("homepage.jsp");
            }
    }
      

  11.   

    按照楼上的大哥的做法把while(rs.next)语句包括在if语句里面会提示else 语句没有if然后把while(rs.next)语句全部包括在if else语句里面页面是能够运行,但是根本就不会判断sql语句,用空值也可以登陆
    把页面调用代码再贴出来希望大家能够解决
    <%@ page contentType="text/html;charset=gb2312" language="java" %>
    <%                String username = request.getParameter("username");
        String password = request.getParameter("password");
        request.setCharacterEncoding("gb2312");
        Connection conn = ConnUtil.getuser();
        UserDenglu bean = new UserDenglu();
        ResultSet rs = bean.getdentlu(conn, request);
        while(rs.next())  {
        if (rs.getString("username") != null && rs.getString("password") != null) {
            if (rs.next()) {
                session.setAttribute("username", username);
                session.setAttribute("password", password);
                response.sendRedirect("homepage.jsp");
            }
        } else {
            out.print("<script language=javascript>alert('用户名或密码错误!')");
        }  }
    %>
    这是在控制台上输出的sql语句:
    select username,password from usersdenglu where username='null'and password='null'
    select username,password from usersdenglu where username='null'and password='null'
      

  12.   

    大家都这个用JSP的吗??看着都晕。在JSP面上写这么多业务代码!LZ学学struts吧。做你这个登陆用STRUTS很好办的
      

  13.   

    你的access连接odbc写法正确么!!!!  按着上面我给你的模式试试看!
      

  14.   

    access连接绝对没问题,我对表进行插入,修改,删除都可以.上面给的是微软的驱动,哪个用上有许多问题的
      

  15.   

    改CLASS
    public class UserDenglu {
         public ResultSet getdentlu(Connection conn, String username,String password) {
          ResultSet rs = null;
            try {            
                Statement smt = conn.createStatement();
                String sql = "select username,password from usersdenglu where username='"+username+"'";
                     sql+= "and password='"+password+"'";
                smt.executeQuery(sql);
                System.out.println(sql);
            } catch (Exception e) {
                System.out.println(e.toString());
            }
            return rs;
        }jsp改为
    <%
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        request.setCharacterEncoding("gb2312");
        Connection conn = ConnUtil.getuser();
        UserDenglu bean = new UserDenglu();
        ResultSet rs = bean.getdentlu(conn,username,password);
            if (rs.next()) {          
              if(rs.getString("username")!=null && rs.getString("password")!=null){
                session.setAttribute("username", username);
                session.setAttribute("password", password);
                response.sendRedirect("homepage.jsp");
              }
           } else {
            out.print("<script language=javascript>alert('用户名或密码错误!')</script>");
        }
    %>
      

  16.   

    lz,上面代码漏啦一句:
     smt.executeQuery(sql);
    改为
     rs = smt.executeQuery(sql);
      

  17.   

    楼上正解!改为 rs = smt.executeQuery(sql);就对了!
      

  18.   

    我已经改成 rs = smt.executeQuery(sql);
      

  19.   

    1.应该先用rs = smt.executeQuery(sql);
      否则你的rs永远都是Null;
    2.不要用ResultSet rs = bean.getdentlu(conn,request);来传参
      讲方法中形参改为 ResultSet rs = bean.getdentlu(conn,username,password);试试
      username,password是你页面中取到的值
      

  20.   

    你是不能执行还是语句有错还是 username,password为空?
      

  21.   

    应该是得到的为空在控制台上输出得到的都是空值
    select username,password from usersdenglu where username='null'and password='null'
    select username,password from usersdenglu where username='null'and password='null'
      

  22.   

    String username = request.getParameter("username");
        String password = request.getParameter("password");
    这个地方改为:
    String username = request.getParameter("username");
    System.out.println("ddddddddddd:"+username);
        String password = request.getParameter("password");
    System.out.println("eeeeeeeeeee"+password);
    把结果贴出来
      

  23.   

    lizhe0428
    说的好像有道理!
    lz, 你先判断一下
    String username = request.getParameter("username");
    String password = request.getParameter("password");是不是为空,如果他们俩为空,他们俩如果为空,你执行的sql就如你上面所说的了!!!
      

  24.   

    ddddddddddd:null
    eeeeeeeeeeenull
    select username,password from usersdenglu where username='null'and password='null'
    ddddddddddd:null
    eeeeeeeeeeenull
    select username,password from usersdenglu where username='null'and password='null'
      

  25.   

    request传过来的是空值!!!!!!!就是这里的错误!
      

  26.   

    把你的登陆时,填写用户名和密码的那个代码贴出来
    应该时html的那个页面
      

  27.   

    你的值没传过来,LZ是不是input里的name写错啦呢?或者多次跳转页面?
      

  28.   

    你输入的数据没有传给request,所以你输入的数据虽然是数据库有的数据,但是你输入的数据没有通过request传给class和页面好像是这么回事,我是个菜鸟,说的不对  高手别骂阿!
      

  29.   

    <tr>
                <td height="24"><div align="right">用户名: </div></td>            <td width="381" height="24"><input name="username" type="text" id="username">
                    <a href="zhuce.jsp">还没注册?</a></td>
            </tr><tr>
                <td height="20"><div align="right">密码:</div></td>
                <td><input name="password" type="password" id="password"></td>
            </tr>
      

  30.   

    还应当有别的代码!
    <form> 部分,还有<form> 中action所对应的类!!
      

  31.   

    LZ,别这么小气吗,把正个文件贴出来吧,这样只能说明你的name没写错,有可能是你跳转过页面。所以只有吧所有的代码贴出来才好查。
      

  32.   

    <%@ page import="java.sql.Connection" %>
    <%@ page import="java.sql.ResultSet" %>
    <%@ page import="com.gxjd.zhangl.ConnUtil" %>
    <%@ page import="com.gxjd.zhangl.UserDenglu" %>
    <%--
      Created by IntelliJ IDEA.  User: user
      Date: 2007-6-4
      Time: 15:30:55
      To change this template use File | Settings | File Templates.--%>
    <%@ page contentType="text/html;charset=gb2312" language="java" %>
    <% String username = request.getParameter("username");
      String password = request.getParameter("password");
      request.setCharacterEncoding("gb2312");
      Connection conn = ConnUtil.getuser();
      UserDenglu bean = new UserDenglu();
      ResultSet rs = bean.getdentlu(conn,request);
     if(rs.next()) {
      if (rs.getString("username") != null && rs.getString("password") != null) {
      if (rs.next()) {
      session.setAttribute("username", username);
      session.setAttribute("password", password);
      response.sendRedirect("homepage.jsp");
                }
            } else {
                out.print("<script language=javascript>alert('用户名或密码错误!')");
            }
     }%>
    <html>
    <head><title>Simple jsp page</title>
    <script language="javascript" type="text/javascript">
    function isfull(){
    if(document.form1.username.value==""||document.form1.password.value=="")
    {
    alert("请输入用户名或密码!");
    return false;
    }}
    </script>
            <style type="text/css">
            <!--
            .style3 {
                font-size: 45px;
                font-family: Arial, Helvetica, sans-serif;
            }        a:link {
                color: #00BFFF;
                text-decoration: none;
            }        a:visited {
                text-decoration: none;
            }        a:hover {
                text-decoration: underline;
                color: #FF0000;
            }        a:active {
                text-decoration: none;
            }        -->
        </style>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body>
    <form name="form1" method="post" action="homepage.jsp" onSubmit="return isfull(this)">
        <table width="750" height="478" border="1" align="center" bordercolor="#2A9F00" bgcolor="#EAEAEA">
            <tr>
                <td height="184" colspan="2"><div align="center"><span class="style3">用户登录</span></div></td>
            </tr>
            <tr>
                <td height="24"><div align="right">用户名: </div></td>            <td width="381" height="24"><input name="username" type="text" id="username">
                    <a href="zhuce.jsp">还没注册?</a></td>
            </tr>
            <tr>
                <td height="20"><div align="right">密码:</div></td>
                <td><input name="password" type="password" id="password"></td>
            </tr>
            <tr>
                <td height="24"><div align="right">
                    <p>
                        <input type="submit" name="Submit" value="提交">
                    </p>
                </div></td>
                <td height="24"><blockquote>
                    <p>
                        <input type="reset" name="Submit" value="重置">
                    </p>
                </blockquote></td>
            </tr>
            <tr>
                <td height="211" colspan="2">&nbsp;</td>
            </tr>
        </table>
    </form>
    </body>
    </html>
    <%ConnUtil.closeConnection(conn);%>
      

  33.   

    这个文件的文件名是叫homepage.jsp吗?
      

  34.   

    homepage.jsp是登陆成功就跳转的页面
      

  35.   

    <form name="form1" method="post" action="homepage.jsp" onSubmit="return isfull(this)">
    这里把action="homepage.jsp" 改为action="你这个文件的文件名"
      

  36.   

    public class UserDenglu{}的类是做什么的!有用到它么?
      

  37.   

    if(rs.next()) {
      if (rs.getString("username") != null && rs.getString("password") != null) {
      if (rs.next()) {
      session.setAttribute("username", username);
      session.setAttribute("password", password);
      response.sendRedirect("homepage.jsp");
                }
            } else {
                out.print("<script language=javascript>alert('用户名或密码错误!')");
            }
     }
    这里有问题
    改为:
    if(rs.next()) {
      if (rs.getString("username") != null && rs.getString("password") != null) {
     
      session.setAttribute("username", username);
      session.setAttribute("password", password);
      response.sendRedirect("homepage.jsp");
            } else {
                out.print("<script language=javascript>alert('用户名或密码错误!')");
            }
     }
      

  38.   

    sgrl(小关)  你不用加班了!!  :)