您好,我正在尝试搜索具有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");
}
}
答案 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);