Android SQLite не возвращает данные по заданному поисковому запросу - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь создать интерфейс поиска, но база данных 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;
}

, но когда я печатаю все, база данных возвращает данные, здесьэто код для get Data , используемый для печати данных, представленных в базе данных

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 голосов
/ 20 декабря 2018

Есть что-то, что вы делаете неправильно в обоих методах:

cursor.moveToFirst();

, а затем:

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

Таким образом, вы пропускаете 1-й ряд результатов, потому что после васпереместите курсор на 1-ую строку, еще раз переместитесь на следующую.Поэтому удалите это:

cursor.moveToFirst();

из обоих методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...