我想从列号中获取字符串。 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);
}
答案 0 :(得分:0)
你想要
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
。如果你不是,那么你需要!
答案 1 :(得分:0)
String p = rs.getString(4); // This should be inside your while
int count=0;
while(rs.next()){
count++;
}
您应该在while
循环中移动第一行。你不能
获取行的列,直到将光标移动到该行
使用res.next()
。
此外,由于您的数据库理想情况下应该只有one
个记录
username
和password
的组合。所以,你可以更好地使用
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")
会给你错误的结果。 ==
运算符不会比较字符串的内容,而是比较用于引用的内容。
答案 2 :(得分:0)
您正在比较两个String对象,而不是检查String中的值。
只需将代码更改为 p.equals(“4”)并尝试。