3
我想在android瀏覽器內容提供商上運行一個簡單的查詢。書籤與歷史項目混合在一起,因此要獲取書籤,只需要選擇「Browser.BookmarkColumns.BOOKMARK = 1」。使用Android內容解析器查詢佔位符整數
String mSelectionClause = Browser.BookmarkColumns.BOOKMARK + " = 1";
與
Cursor cursor = getContentResolver().query(Browser.BOOKMARKS_URI, null, mSelectionClause, null, null);
工作正常。但是,所有我試圖用一個佔位符來獲得相同的結果失敗:
String mSelectionClause = Browser.BookmarkColumns.BOOKMARK + " = ?";
查詢:
Cursor cursor = getContentResolver().query(Browser.BOOKMARKS_URI, null, mSelectionClause, mSelectinArgs, null);
返回在所有這些情況下,一個空的光標:
mSelectionArgs[0] = "1"
mSelectionArgs[0] = '1'
mSelectionArgs[0] = String.valueOf(1)
mSelectionArgs[0] = Integer.toString(1)
mSelectionArgs[0] = 1 + "" (idea picked up on this site)
我做有什麼不對或者我應該放棄使用佔位符的希望?
乾杯。
謝謝。所以經驗法則是「當數據庫字段是字符串時使用佔位符,其他類型直接在選擇子句中使用」? 如果我可以進一步考慮一下,避免硬編碼值的好方法是什麼?條款中是否可以使用提供者定義的常量?還是資源字符串? – 2015-03-03 08:01:58
如果你只是在談論代碼設計,是的,如果你知道Browser.BookmarkColumns.BOOKMARK的值始終爲1,那麼你可以使用一個常量,或者將整行寫成常量(mSelectionClause)。如果在BOOKMARK中有相同條件的查詢,SelectionBuilder類可以幫助您重構代碼並簡化選擇:https://developer.android.com/samples/BasicSyncAdapter/src/com.example。 android.common /分貝/ SelectionBuilder.html – Quanturium 2015-03-03 17:41:49