【问题标题】:How can i get another string from select query?如何从选择查询中获取另一个字符串?
【发布时间】:2012-11-19 10:17:14
【问题描述】:

我想从列号中获取字符串。 4 从我的数据库中检查用户权限。

我可以使用rs.getString(index) 从第 4 列获取数据吗? 我想检查用户的权限...所以如果列数据等于 4,页面将被重定向到 AdminControlPanel.jsp 但是,这段代码不起作用:(

String user=request.getParameter("login");
String pass=request.getParameter("password");
 Class.forName("com.mysql.jdbc.Driver").newInstance();
    Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/android","root","root");  
           Statement st=con.createStatement();
           ResultSet rs=st.executeQuery("select * from users where login='"+user+"' and password='"+pass+"'");
           String p = rs.getString(4);                   
           int count=0;
           while(rs.next()){
           count++;
          }
      if(count>0 && p == "4"){
             // out.println(rs);
                           response.sendRedirect("AdminControlPanel.jsp");
                      }
          else{
               out.println("aaa");
               response.sendRedirect("#");
           }
        }
                 catch(Exception e){
    System.out.println(e);
}

【问题讨论】:

  • 这段代码怎么不起作用?有什么错误吗?不是预期的结果?请解释一下。
  • 不要选择'*',只选择你实际使用的列。还可以使用准备好的语句并清理输入。
  • 代码看起来很好什么,是的,你可以直接取任何列的值,你面临的错误是什么???

标签: java mysql string jsp


【解决方案1】:

您是在比较两个 String 对象,而不是检查 String 中的值。

只需将代码更改为 p.equals("4") 并尝试。

【讨论】:

    【解决方案2】:
    String p = rs.getString(4);   // This should be inside your while                  
    int count=0;
    while(rs.next()){
        count++;
    }
    
    • 您应该将第一行移到while 循环中。你不能 获取一行的列,直到您将光标移动到该行 使用res.next()

    • 另外,因为您的数据库在理想情况下应该只有 one 记录 usernamepassword 的组合。因此,您可以更好地使用 if 而不是 while

    • 您实际上并不需要 count 变量。

    所以,你的代码应该是:-

    ResultSet rs=st.executeQuery("select * from users where login='"+user+"' " +
                                  "and password='"+pass+"'");
    if (rs.next()) {
        String p = rs.getString(4);  // Note that using Column name is a better idea
    
        // or rs.getInt(4) if the column type is `int`
    
        if(p.equals("4")) {   // Use equals method to compare string content
             response.sendRedirect("AdminControlPanel.jsp");
    
        } else{
             out.println("aaa");
             response.sendRedirect("#");
        }
    }
    

    另外,请注意您应该使用equals 方法比较您的字符串。 if (p == "4") 会给你错误的结果。 == 运算符不比较字符串的内容,而是比较用于比较的引用的内容。

    【讨论】:

      【解决方案3】:

      你想要

      while (rs.next()) {
         String val = rs.getString(4);
         ....
      

      请注意,遍历 ResultSet 会遍历 。对于每一行,列索引从“1”开始。

      但是通过列名获取更安全,因为您的 SQL 查询既没有指定列也没有指定它们返回的顺序:

      String val = rs.getString("COLUMN_NAME");
      

      我从下面看到你需要一个整数。查看ResultSet 的文档以获取更多信息,但是:

      int val = rs.getInt("COLUMN_NAME");
      

      顺便说一句,我没有看到您在上面关闭您的ResultSet/Statement/Connection。如果你不是,那么你需要!

      【讨论】:

      • 我改成我的列名,但是效果差不多。它不会将我重定向到 AdminControlPanel.jsp 如果列类型是 int,我应该使用什么?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多