2011-05-30 19 views
0

我正在使用內容提供程序。內容提供商使用SQLBuilder:內容提供商MAX大小編譯的sql語句

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結合的問號,可有人告訴我一個例子嗎?

回答

2
if(uriMatcher.match(uri) == ANIMAL_RID) { 
     sqlBuilder.appendWhere("rid = ?"); 
     selectionArgs = new String[] {uri.getPathSegments().get(1)}; 
    } 

這是有效的。沒有更多的緩存錯誤。