Android SQLite不返回给定搜索词的数据

时间:2018-12-20 19:19:55

标签: android-sqlite

我正在尝试构建搜索界面,但SQLite数据库未返回任何内容,这是搜索功能的代码

public List<DiaryModel> searchData(String srchTerm){
    List<DiaryModel> data2=new ArrayList<>();
    SQLiteDatabase db1 = this.getWritableDatabase();
    String sql="SELECT * FROM "+DB_TABLE+" WHERE "+KEY_HEADING+" LIKE '"+srchTerm+"%'";
    Cursor cursor2 =db1.rawQuery(sql,null);
    cursor2.moveToFirst();
    StringBuilder stringBuffer2;
    stringBuffer2 = new StringBuilder();
    DiaryModel diaryModel2;
    while (cursor2.moveToNext()){
        diaryModel2 = new DiaryModel();
        String heading = cursor2.getString(cursor2.getColumnIndexOrThrow("heading"));
        String desc = cursor2.getString(cursor2.getColumnIndexOrThrow("desc_"));
        diaryModel2.setHeading(heading);
        diaryModel2.setDesc(desc);
        stringBuffer2.append(diaryModel2);
        data2.add(diaryModel2);
    }
    return data2;
}

但是当我打印所有内容时,数据库返回数据,这是获取数据的代码,用于打印数据库中存在的数据

public List<DiaryModel> getdata(){
    List<DiaryModel> data=new ArrayList<>();
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor =db.rawQuery("SELECT * FROM diary_db", null);
    cursor.moveToFirst();
    StringBuilder stringBuffer = new StringBuilder();
    DiaryModel diaryModel;
    while (cursor.moveToNext()){
        diaryModel = new DiaryModel();
        String heading = cursor.getString(cursor.getColumnIndexOrThrow(KEY_HEADING));
        String desc = cursor.getString(cursor.getColumnIndexOrThrow(KEY_DESC));
        diaryModel.setHeading(heading);
        diaryModel.setDesc(desc);
        stringBuffer.append(diaryModel);
        data.add(diaryModel);
    }
    return data
}

只有这个SQL语句有效了

SELECT * FROM diary_db

如果存在任何条件,则不会返回任何结果。

1 个答案:

答案 0 :(得分:0)

两种方法都存在错误:

cursor.moveToFirst();

然后:

while (cursor.moveToNext()){
.................
}

这样,您将错过结果的第一行,因为将光标移至第一行后,您将再次移至下一行。
所以删除它:

cursor.moveToFirst();

这两种方法。