这是我在databasehelper类中为验证编写的函数:
public String verify_user(String is_user)
{
String verify = " ";
String check = " ";
SQLiteDatabase fg = this.getReadableDatabase();
Cursor c = fg.query(Login_Table, null, null, null, null, null, null);
int iuser = c.getColumnIndex(colUsername);
for(c.moveToFirst() ; !c.isAfterLast();c.moveToNext())
{
verify = c.getString(iuser);
if(is_user == verify)
{
check = "Valid User!";
}
else
{
check = "Not Valid User!";
}
}
return check;
}
is_user来自.xml布局文件,其中用户输入用户名...当我调试时,我发现了一个奇怪的行为。虽然在条件中is_user和verify在某一点上具有相同的值但是仍然执行。所以我知道用户有效这段代码说无效用户! 。请指导我。谢谢!
来自一个新的建议:
String check = " ";
SQLiteDatabase fg = this.getReadableDatabase();
String[] args = new String[1];
args[0] = is_user;
Cursor c = fg.query(Login_Table, null, colUsername + " = ?", args, null, null, null);
int iuser = c.getColumnIndex(colUsername);
if(is_user.equals(c.getString(iuser)))
{
check = "Valid User!";
}
return check;
答案 0 :(得分:1)
在Java中,您使用equals()
而不是==
if(is_user.equals(verify))
此外,您不需要遍历所有用户。只需在查询中添加条件即可。有关详细信息,请参阅documentation。
编辑:好的查询将是:
String[] args = new String[1];
args[0] = is_user;
Cursor c = fg.query(Login_Table, null, colUsername + " = ?", args, null, null, null);
始终使用参数,永远不会像colUsername+"="+is_user
那样连接,这很容易受到SQL injection的攻击。</ p>
答案 1 :(得分:0)
使用
.equals(...).
if(is_user.equals(verify)){
...