1

我使用此函数从 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;

}

但我总是得到 TRUE。你能帮我找出问题所在吗?

4

2 回答 2

6

你不应该检查游标是否为空你应该检查游标中是否存在任何东西

if(cursor.moveToFirst()){
    return true
}else{
    return false;
}
于 2013-09-19T16:26:15.500 回答
3

您可以尝试Cursor getCount()来检查查询结果中的行数。以下是示例代码:

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 的回答也不错..

于 2013-09-19T16:25:57.997 回答