查询始终在Sqlite Android中返回false

时间:2018-03-13 15:34:00

标签: android-sqlite

我想用sqlite表检查用户名和密码,在我的情况下,查询总是返回false ...

这是我的查询...

 public boolean validateUser(String u_name, String p_word){
 Cursor c = getReadableDatabase().rawQuery(
            "SELECT FNAME,PASSWORD FROM " + TABLE_NAME + " WHERE "
       + fname + "='" + u_name+"'AND "+ password +"='"+ p_word+"'" ,  null);
 if (c!=null)
    {
       return true;
    }
    else{
        return false;
        }
    }

1 个答案:

答案 0 :(得分:0)

检查Cursor是否为null基本上没用,因为rawQuery将返回有效的Cursor。也就是说,没有要提取的数据将导致没有行的空Cursor,而如果已经提取了数据,则Cursor将有1行或更多行。

你应该使用Cursor getCount()方法检查Cursor是否为空,如果没有行或行数,它将返回0。或者你可以使用一些Cursor的移动方法,它们将返回true / false,具体取决于是否可以执行移动。例如if (c.moveToFirst) { ... //row(s) exist} else { ... //no rows exists }

您还应该在返回之前关闭Cursor。所以也许可以使用: -

 public boolean validateUser(String u_name, String p_word){
 Cursor c = getReadableDatabase().rawQuery(
            "SELECT FNAME,PASSWORD FROM " + TABLE_NAME + " WHERE "
       + fname + "='" + u_name+"'AND "+ password +"='"+ p_word+"'" ,  null);
 int count = c.getCount(); // get the number of rows
 c.close(); // Close the Cursor
 return count > 0; // return result (no data found = false, else true)

许多人建议不使用rawQuery,而是使用方便的Cursor query方法。这可能是: -

public boolean validateUser(String u_name, String p_word) {
    String[] columns = new String[]{
        FNAME,
        PASSWORD
    };
    String whereclause = FNAME + "=? AND " + PASSWORD + "=?";
    String[] whereargs = new String[]{
        u_name,
        p_word
    };
    Cursor c = this.getWritableDatabase().query(
        TABLE_NAME,
        columns,
        whereclause,
        whereargs,
        null,null,null
    );
    int count = c.getCount();
    c.close();
    return count > 0;
} 
  • 请注意,上述代码是原则上的代码,尚未经过测试,因此可能包含输入错误。
  • 上面的代码假定该方法在Database Helper类中(即SQLiteOpenHelper的子类)。
  • 假设FNAMEPASSWORD是用于列名的正确字符串变量,而不是fnamepassword
  • 由于提供的代码有限,已经做出了假设