检查SQLite Android中是否存在数据

检查SQLite Android中是否存在数据,android,sqlite,Android,Sqlite,我使用此函数从SQlite获取特定数据: SearchRes getSresultByName(String name) { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.query(TABLE_WIKIRES, new String[] { KEY_ID, KEY_SNAME, KEY_SJSON }, KEY_SNAME + "=?", n

我使用此函数从SQlite获取特定数据:

SearchRes getSresultByName(String name) {
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_WIKIRES, new String[] { KEY_ID,
            KEY_SNAME, KEY_SJSON }, KEY_SNAME + "=?",
            new String[] { name }, null, null, null, null);

    if (cursor != null)
        cursor.moveToFirst();

    SearchRes searchres = new SearchRes(Integer.parseInt(cursor.getString(0)),cursor.getString(1), cursor.getString(2));

    return searchres;
}
它工作得很好,我需要创建类似的函数来测试表中是否存在值,所以我尝试了以下方法:

boolean checkIfExist(String name) {
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_WIKIRES, new String[] { KEY_ID,
            KEY_SNAME, KEY_SJSON }, KEY_SNAME + "=?",
            new String[] { name }, null, null, null, null);


    if (cursor == null)
        return false;

    else
        return true;

}
但我总是能实现。您能帮我找出问题所在吗?

您可以尝试使用游标检查查询结果中的行数。。以下是示例代码:

boolean checkIfExist(String name) {
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_WIKIRES, new String[] { KEY_ID,
            KEY_SNAME, KEY_SJSON }, KEY_SNAME + "=?",
            new String[] { name }, null, null, null, null);


    if (cursor.getCount() > 0)
        return true;

    else
        return false;

}
@tyczj的回答也很好。

您可以尝试使用游标检查查询结果中的行数。。以下是示例代码:

boolean checkIfExist(String name) {
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_WIKIRES, new String[] { KEY_ID,
            KEY_SNAME, KEY_SJSON }, KEY_SNAME + "=?",
            new String[] { name }, null, null, null, null);


    if (cursor.getCount() > 0)
        return true;

    else
        return false;

}

@tyczj的回答也很好。

您不应该检查光标是否为空,而应该检查光标中是否存在任何内容

if(cursor.moveToFirst()){
    return true
}else{
    return false;
}

您不应该检查游标是否为空,而应该检查游标中是否存在任何内容

if(cursor.moveToFirst()){
    return true
}else{
    return false;
}

这样做是多余的,因为如果计数大于0,则无论如何都必须调用movetoFirst,否则会出现越界错误Agree。。但该方法的目的不是读取数据,而是检查数据是否存在。。正如我在回答中提到的。。这两种方法都很好。正如所解释的,getCount可能是一个非常昂贵的操作。因此,我建议除非您需要获取总计数,否则应避免使用该方法。但是,我在Cursor中检查了null,但是当Cursor count为0时,catch block中显示了异常,但是,在应用上述方法之后,现在可以了,感谢您的方法。这样做是多余的,因为如果计数大于0,那么您必须调用movetoFirst,否则您将得到越界错误Agree。。但该方法的目的不是读取数据,而是检查数据是否存在。。正如我在回答中提到的。。这两种方法都很好。正如所解释的,getCount可能是一个非常昂贵的操作。因此,我建议除非您需要获取总计数,否则不要使用该方法。但是,我检查了Cursor中的null,但是当Cursor count为0时,catch块中会显示异常,但是,在应用上述方法之后,现在就可以了,感谢您的方法。