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);
但生成的查詢字符串爲空。
有什麼建議嗎?