0

我想从列号中获取字符串。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);
}
4

3 回答 3

0
String p = rs.getString(4);   // This should be inside your while                  
int count=0;
while(rs.next()){
    count++;
}
  • 您应该在while循环内移动第一行。在使用 将光标移动到该行之前,您无法获取一行的列res.next()

  • 此外,由于您的数据库理想情况下应该只有和one组合的记录。因此,您可以更好地使用 an 而不是.usernamepasswordifwhile

  • 而且你真的不需要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")会给你错误的结果。==运算符不比较字符串的内容,而是比较用于比较的引用的内容。

于 2012-11-19T10:20:55.363 回答
0

您正在比较两个字符串对象,而不是检查字符串中的值。

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

于 2012-11-19T10:40:31.690 回答
0

你要

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

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

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

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

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

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

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

于 2012-11-19T10:18:46.193 回答