Sqlite验证列的值是否存在

R00*_*00t 0 sqlite select android cursor

我想知道这种方法是否正确验证_username的值是否已存在于"username"列中

public boolean verification(String _username) throws SQLException{
    Cursor c = dataBase.rawQuery("SELECT * FROM "+TABLE_NAME+" WHERE "+KEY_USERNAME+"="+_username, null);
    if (c!=null)
        return true; // return true if the value of _username already exists
    return false; // Return false if _username doesn't match with any value of the columns "Username"
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做同样的事情,我真的不确定这一点,它似乎对我来说.谢谢.

Sam*_*Sam 6

小心的SQL注入攻击!您应该始终使用参数化查询:

Cursor c = dataBase.rawQuery("SELECT 1 FROM "+TABLE_NAME+" WHERE "+KEY_USERNAME+"=?", new String[] {_username});
Run Code Online (Sandbox Code Playgroud)

(老实说,我不确定你的第一个查询是如何抛出异常的,因为你忘了将字符串包装在引号中......)

也rawQuery()将始终返回Cursor,您必须检查Cursor是否为空,而不是null.


至于"最好"的方法,这很好,但我建议关闭光标以释放资源.全部一起:

public boolean verification(String _username) {
    Cursor c = dataBase.rawQuery("SELECT 1 FROM "+TABLE_NAME+" WHERE "+KEY_USERNAME+"=?", new String[] {_username});
    boolean exists = c.moveToFirst();
    c.close();
    return exists;
}
Run Code Online (Sandbox Code Playgroud)