搜索多列sqlite

时间:2018-07-26 09:24:13

标签: android sqlite

您好,我正在尝试搜索具有4列的sqlite数据库,但是应用程序崩溃了,日志错误为:-

Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.

我想知道是否有一种方法可以搜索多列和单列的sqlite数据库。

光标的代码是:-

cursor = mReadableDB.query(WORD_LIST_TABLE, columns, where, whereArgs, null, null, null);

数据库代码为:   公共游标搜索(字符串searchString){

    String[] columns = new String[]{KEY_WORD};
    String where = KEY_WORD + " LIKE ?";
    searchString = "%" + searchString + "%";
    String[] whereArgs = new String[]{searchString};

    Cursor cursor = null;

    if (mReadableDB == null) {
        mReadableDB = getReadableDatabase();
    }
    cursor = mReadableDB.query(WORD_LIST_TABLE, columns, where, whereArgs, null, null, null);

    return cursor;
}

,搜索类别为:  public void showResult(View view){

    String word = editText_search.getText().toString();

    textView.setText("Result for " + word + ":\n\n");

    Cursor cursor = mDataBase.search(word);

    cursor.moveToFirst();

    if (cursor != null & cursor.getCount() > 0) {

        int index;

        String result;

        do {
            index = cursor.getColumnIndex(mDataBase.KEY_WORD);
            result = cursor.getString(index);
            textView.append(result + "\n");
        } while (cursor.moveToNext());

        cursor.close();
    } else {
        textView.append("no result");
    }
}

1 个答案:

答案 0 :(得分:-1)

您的光标不返回任何内容。这就是我通常在android中使用数据库的方式:通过使用.rawQuery();和SQLite。

例如

    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.rawQuery("SELECT * FROM tasks WHERE id = " + id, null);

您还可以通过调用cursor.moveToFirst();来检查光标是否为空。 如果游标为空,则该方法返回false。否则返回true

检查后,可以使用cursor.move(rowNumber);转到所需的行,并使用get方法获取所需列的值,例如cursor.getString(1);