2011-03-28 63 views
10

我通過getContentResolver().update()方法更新ListView中的項目,我想通過ContentValue增加'views'字段,但無法弄清楚這是否可能。Android:通過ContentValue遞增數據庫字段

我可以用原始SQL SET views = views + 1來做到這一點,但是設置ContentValue(如cv.put("views", "views + 1"))會導致視圖字段顯式設置爲「視圖+ 1」而不是數字。

任何關於這個的指針,還是我留給一個更手動的方法?

感謝,

保羅

UPDATE:

我已經回到使用原始SQL執行更新,現在,然後通過手動getContentResolver().notifyChange()通知改變的潛在的CursorAdapter。如果我能直接通過getContentResolver().update()找到一種方法,那麼仍然會很棒,所以如果有人有辦法做到這一點,請將其發佈到此處。

回答

7

我這最後的解決辦法是通過ContentProvider使得要getContentResolver().update(customUri, ...)呼叫通過這個Uri告訴我的ContentProvider的覆蓋使用自定義Uri(沿...item/5/updateviews線) update()方法來增加此項目的查看計數,從而避免需要通過參數ContentValues將值傳遞到update()

-1
String key = "1";//some value where you want to update 
int currentCount = 5;//the existing value of the count field 

ContentValues values = new ContentValues(); 
values.put("my_counter_field", currentCount + 1); 
int updatedRows = database.update("my_table_name", values, "my_where_field = ?", new String[] {key}); 

類似於使用ContentValues的東西。

一個可能更簡單的途徑可能是: database.execSQL("UPDATE my_table_name SET my_counter_field = my_counter_field + 1 WHERE my_where_field = ?", new Object[] {key});

,或者甚至使用觸發器。看到這個問題,看它是否符合您需求:Use trigger for auto-increment

+0

我該如何知道currentCount的值...不是讓SQL更新命令處理增量的要點嗎? – 2011-03-28 21:32:05

+0

你需要事先得到:( – binnyb 2011-03-28 21:33:58

+0

啊......好吧,那真的不是增加,那麼不幸的是,觸發器將無法工作,因爲增量與用戶UI操作相關,而不是對錶格的更改。 – 2011-03-28 21:42:43

0

我在我的內容提供者上實現了調用API,作爲將原始/一次性SQL查詢直接發送到底層SQLiteDatabase的一種方式。這很容易。