2014-04-01 22 views
1

我在SugarORM的ORM和底層SQLite數據庫之間插入了一個ContentProvider層,以便能夠對它使用SyncAdapter。使用buildQuery調用通過ContentProvider公開的數據庫查詢方法

的ORM具有這樣的方法:

public static <T extends SugarRecord<?>> List<T> find(Class<T> type,String whereClause,String[] whereArgs,String groupBy, String orderBy, String limit) 

相匹配很好的SQLiteDatabase的查詢方法:

public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) 

的問題是,ContentProvider的僅具有沒有按」一個查詢方法t匹配的必要參數:

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

所以我想轉向從ORM的參數到一個SQL查詢,然後剛好路過,爲了我的方法,那麼它可以運行原始查詢並返回一個指針,就像這樣:

@Override 
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 
{ 
    switch (uriMatcher.match(uri)) 
    { 
    case RAW_QUERY: 
     cursor = db.rawQuery(selection, selectionArgs);//query, arguments 

...

第一問題是,SQLiteQueryBuilder的this method被棄用:

buildQuery (String[] projectionIn, String selection, String[] selectionArgs, String groupBy, String having, String sortOrder, String limit) 

所以後來我嘗試這樣做:

Object args[] = whereArgs; 
String where_query = String.format(whereClause, args); 
SQLiteQueryBuilder builder = new SQLiteQueryBuilder(); 
builder.setTables(getTableName(type)); 
String query = builder.buildQuery(null, whereClause, whereArgs, groupBy, null, orderBy, limit); 

但生成的查詢字符串爲空。

有什麼建議嗎?

回答

0
public Cursor query(Uri iUri, String[] iProjection, String iSelection, 
      String[] iSelectionArgs, String iSortOrder) { 
     SQLiteQueryBuilder mBuilder = new SQLiteQueryBuilder(); 
     mBuilder.setTables(Database.KEY_TABLE); 
     switch (uriMatcher.match(iUri)) { 
     case RAW_QUERY: 
      mBuilder.appendWhere(Database.KEY_ROWID); 
      break; 
     default: 
      throw new IllegalArgumentException("Unsupported URI: " + iUri); 
     } 
     Cursor cursor = mBuilder.query(db, iProjection, iSelection, 
       iSelectionArgs, null, null, iSortOrder); 
     return cursor; 
    } 

在你的代碼中試試這個,我認爲這會解決你的問題。

相關問題