【问题标题】:result set jsp - how to use?结果集jsp——如何使用?
【发布时间】:2011-03-18 23:02:31
【问题描述】:

谁能告诉我为什么这不起作用?我希望能够检查从数据库查询返回的用户名/密码是否等于一个值。

会话属性“loginSuccess”总是返回 false,即使值应该匹配。

<%@ page language="java" import="java.sql.*" %>
<%
            String driver = "oracle.jdbc.driver.OracleDriver";
            Class.forName(driver).newInstance();

            Connection con = null;
            ResultSet rst = null;
            Statement stmt = null;

            try {
                String url = "jdbc:oracle:thin:username/password@url:port:SID";
                con = DriverManager.getConnection(url);
                stmt = con.createStatement();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
            if (request.getParameter("action") != null) {
                rst = stmt.executeQuery("select username, password"
                        + " from table");
                }
%>


                <%

                boolean loginCheck = false;
                           int count = 1;
                            while (rst.next()) {

if(request.getParameter("action")!=null){
    if("username1"==rst.getString("username")){
        if("password1"==rst.getString("password")){
            loginCheck = true;
            }
        }
    }

                            count++;
                            }

                           if(loginCheck==true){
                               session.setAttribute("loginSuccess", "true");
                               }else{
                               session.setAttribute("loginSuccess", "false");
                               }

                            rst.close();
                            stmt.close();
                            con.close();
                %>

<jsp:forward page="login.jsp"/>

【问题讨论】:

    标签: java jsp jdbc


    【解决方案1】:

    您正在使用 == 来比较字符串。请尝试使用 equals。

    我建议不要以这种方式将 scriptlet 代码放入 JSP 中。您应该使用 JSTL 标记库编写 JSP。

    我还建议将该数据库代码放在 POJO 中,以便您可以离线测试它,与您的 servlet/JSP 引擎分开。然后让 servlet 实例化 POJO,与数据库交互,并将结果发送到 JSP。

    这需要更多的工作,但从长远来看,设计会更好地扩展和扩展。

    【讨论】:

    • 哈!很简单。我写的时候一定是在 Javascript 模式下。感谢您注意到这一点!
    • 感谢您提供的其他提示.. 对此仍然很陌生,因此不胜感激。
    • @etech:我还建议学习 SQL WHERE 子句。您不必要地将整个数据库表复制到 Java 的内存中,比较 Java 中的每一行并忽略不匹配的数据。多么浪费资源。只需利用 SQL 的能力。编写 SQL 查询,使其准确返回与用户名/密码匹配的行。如果它返回一行,它是有效的。如果它什么都不返回,那么它是无效的。就这么简单,效率更高,特别是如果表中有很多行;)
    【解决方案2】:

    我认为你在这行代码中有一个基本的语法错误。

    "username1"==rst.getString("username")

    应该是这样的

    rst.getString("username").equalsIgnoreCase("username1");

    和密码类似。 请检查这是否有帮助。

    【讨论】:

    • 尽管翻转比较 "username1".equalsIgnoreCase(rst.getString("username")) 会更安全,因为数据库中可能存在空值。
    • 确保你可以使用这个“username1”.equalsIgnoreCase(rst.getString("username") + "")。如果为 null,则 null 将被转换为字符串。 :))
    猜你喜欢
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多