Ошибка логики SQLite - PullRequest
       4

Ошибка логики SQLite

1 голос
/ 06 декабря 2011

Я получаю следующую ошибку при попытке выполнить запрос через QSB.Я создал базу данных с необходимыми столбцами для QSB.

11-30 20:12:49.805: E/DatabaseUtils(2116): android.database.sqlite.SQLiteException: SQL logic error or missing database
11-30 20:12:49.805: E/DatabaseUtils(2116):  at android.database.sqlite.SQLiteQuery.native_fill_window(Native Method)
11-30 20:12:49.805: E/DatabaseUtils(2116):  at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:75)
11-30 20:12:49.805: E/DatabaseUtils(2116):  at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:288)
11-30 20:12:49.805: E/DatabaseUtils(2116):  at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:269)
11-30 20:12:49.805: E/DatabaseUtils(2116):  at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:171)
11-30 20:12:49.805: E/DatabaseUtils(2116):  at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:248)
11-30 20:12:49.805: E/DatabaseUtils(2116):  at com.simple.search.DatabaseHelper.query(DatabaseHelper.java:65)
11-30 20:12:49.805: E/DatabaseUtils(2116):  at com.simple.search.DatabaseHelper.getRecordMatches(DatabaseHelper.java:76)

DatabaseHelper.query

private Cursor query(String selection, String[] selectionArgs,
        String[] columns) {
    SQLiteDatabase mDb = getReadableDatabase();
    SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
    builder.setTables(DATABASE_TABLE);

    Cursor cursor = builder.query(mDb, columns,
            selection, selectionArgs, null, null, null);
    if (cursor == null) {
        return null;
    } else if (!cursor.moveToFirst()) {
        cursor.close();
        return null;
    }
    return cursor;
}
public Cursor getRecordMatches(String query, String[] columns) {
    String selection = SearchManager.SUGGEST_COLUMN_TEXT_1 + " MATCH ?";
    String[] selectionArgs = new String[] {query+"*"};

    return query(selection, selectionArgs, columns);
}

public Cursor getRecord(String rowId, String[] columns) {
    String selection = "rowid = ?";
    String[] selectionArgs = new String[] {rowId};

    return query(selection, selectionArgs, columns);
}

edit: добавлены getrecordmatches, добавлены getrecord

1 Ответ

0 голосов
/ 08 декабря 2011

Я решил это с помощью совершенно другого курсора.Это примитивно, но это работает.

private Cursor query(String selection, String[] selectionArgs,
        String[] columns) {
    Log.d(Tag.getTag(this),
            ("selection : " + selection + ", selectionArgs[0] :"
                    + selectionArgs[0] + ", columns :" + columns));
    SQLiteDatabase mDb = getReadableDatabase();
    String query = selectionArgs[0];
    Cursor cursor = mDb
            .rawQuery(
                    "SELECT " + columns[0] +", "+ columns[1] + " FROM " + DATABASE_TABLE + " WHERE " + columns[1] + " LIKE ?",
                    new String[] { "%" + query  + "%" });
     if (cursor == null) {
     return null;
     } else if (!cursor.moveToFirst()) {
     cursor.close();
     return null;
     }
     return cursor;

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