Контент-провайдер MAX размер скомпилированного SQL-оператора - PullRequest
0 голосов
/ 30 мая 2011

Я использую контент-провайдеров. Контент-провайдер использует SQLBuilder:

public Cursor query(Uri uri, String[] projection, String selection,
        String[] selectionArgs, String sortOrder) {

    SQLiteQueryBuilder sqlBuilder = new SQLiteQueryBuilder();
    sqlBuilder.setTables(TABLE_NAME);

    if(uriMatcher.match(uri) == ANIMAL_ID)
        sqlBuilder.appendWhere(ID + " = " + uri.getPathSegments().get(0));

    if(uriMatcher.match(uri) == ANIMAL_PID)
        sqlBuilder.appendWhere(PID + " = " + uri.getPathSegments().get(1));

    if(uriMatcher.match(uri) == ANIMAL_NAME)
        sqlBuilder.appendWhere(NAME + " = " + uri.getPathSegments().get(1));

    if(uriMatcher.match(uri) == ANIMAL_RID)
        sqlBuilder.appendWhere("rid = " + uri.getPathSegments().get(1));

    if(sortOrder == null || sortOrder == "")
        sortOrder = "naam";

    Cursor c = sqlBuilder.query(animalDB, projection, selection, selectionArgs, null, null, sortOrder);
    c.setNotificationUri(getContext().getContentResolver(), uri);

    return c;
}

Это полная ошибка, которую я получаю:

05-30 12:36:43.564: WARN/Database(6746): Reached MAX size for compiled-sql statement cache for database /data/data/nl.actinum.labbook/databases/blue4green; i.e., NO space for this sql statement in cache: SELECT * FROM dier WHERE (rid = 84) ORDER BY naam. Please change your sql statements to use '?' for bindargs, instead of using actual values

Мне непонятно, как я могу комбинировать знаки вопроса с SQLBuilder, может кто-нибудь показать мой пример?

1 Ответ

2 голосов
/ 01 июня 2011
if(uriMatcher.match(uri) == ANIMAL_RID) {
        sqlBuilder.appendWhere("rid = ?");
        selectionArgs = new String[] {uri.getPathSegments().get(1)};
    }

Это работает. Больше ошибок кеша.

...