2012-02-23 30 views
2

當我必須查詢相關表時,我總是使用rawQuery()。但是,如果沒有原始查詢,ContentProviders都沒有更好的方法嗎? 如果您已將所有字段定義爲常量(而非硬編碼)並且您必須手動連接所有字段,那麼編寫原始查詢會非常痛苦。犯錯很容易。 謝謝!在不使用rawQuery的情況下查詢Android中的相關表()

這裏有一些簡單的代碼示例,你可以看到,它不是「禮貌」到Concat的常量所有的時間...

String sql = "SELECT "+T_PARTICIPATION+".* , "+STUDENT_SURNAME+"+\", \"+"+NAME+" AS "+NAME+" "+ 
     "FROM "+T_PARTICIPATION+", "+T_STUDENT+" "+ 
     "WHERE "+T_PARTICIPATION+"."+CONNECTION_PROFILE_ID+"=1 AND "+SEANCE_ID+" IN (1, 2)"; 
return mDatabase.rawQuery(sql, null); 

編輯:雖然沒有提供更多的答案,我接受@JoeMalin提供的一個

回答

1

我假設這是一個SQLite數據庫,不需要作爲內容提供者公開,所以將它保留爲SQLite是正確的方法。

爲什麼不使用SQLiteDatabase.query()?它允許選擇字符串和一個 選擇參數數組。或者,你可能需要的是SQLiteQueryBuilder。不知道更多關於你的應用程序,或看到你當前的代碼,很難說。

+0

嗨!是的,這並不需要作爲內容提供商公開。我不使用query(),因爲它不允許你查詢多個表(這是FROM中的多個表)。我編輯了這個問題幷包含了一些代碼。從你的迴應中,我認爲SQLiteQueryBuilder中的這個方法更合適:'public static String buildQueryString(boolean distinct,String tables,String [] columns,String where,String groupBy,String having,String orderBy,String limit) ' – Caumons 2012-02-25 20:02:16

+0

你知道是否有比使用'buildQueryString()'更好的方法嗎? – Caumons 2012-03-09 00:13:26

相關問題