Android:通过ContentValues增加DB字段

时间:2011-03-28 21:20:17

标签: android sqlite android-contentprovider

我正在通过getContentResolver().update()方法更新ListView中的项目,我想通过ContentValue增加'views'字段,但无法弄清楚这是否可行。

我可以使用原始SQL SET views = views + 1执行此操作,但设置ContentValue(例如cv.put("views", "views + 1"))会导致视图字段明确设置为“views + 1”而不是数字。

关于此的任何指示,或者我是否采用更手动的方法?

谢谢,

更新:

我现在回到使用原始SQL执行更新,然后通过getContentResolver().notifyChange()手动通知基础CursorAdapter更改。如果我能通过getContentResolver().update()找到直接做到这一点的方法,那仍然会很棒,所以如果有人有办法,请在此处发布。

3 个答案:

答案 0 :(得分:7)

我对此的最终解决方案是通过Uri使用自定义...item/5/updateviewsContentProvider行),以便调用getContentResolver().update(customUri, ...)传递此Uri update() 1}}告诉我的ContentProvider的重写update()方法增加此项的查看次数,从而避免需要通过ContentValues参数将值传递给{{1}}。

答案 1 :(得分:0)

我在内容提供程序上实现了调用API,作为将原始/一次性SQL查询直接发送到底层SQLiteDatabase的方法。这很容易。

答案 2 :(得分:-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