【发布时间】:2011-12-20 12:30:36
【问题描述】:
我需要对我的数据库执行 INSERT 或 UPDATE IF EXIST 类型的过程。我读到.replace() 是要走的路。它插入新记录就好了,但如果记录已经存在,它似乎不会更新它。
我有这样的事情:
ContentValues values = new ContentValues();
values.put(ID, 1);
values.put(NAME, "bob");
values.put(VISIBLE, true);
db.replace("peopleTable", null, values);
如果我在此记录不在数据库中时运行此代码,它似乎可以很好地创建记录,就像我执行了insert() 一样。但是,如果我将 NAME 更改为“john”或类似的名称,然后再次运行 replace(),它似乎不会更新记录。
根据文档,语法如下:
public long replace (String table, String nullColumnHack, ContentValues initialValues)
为什么叫initalValues?这是否意味着这些值仅在记录不存在并且将被插入时使用?如果是这样,您如何使用该方法更新记录?您在哪里指定新值?
如果我完全误解了 replace() 的作用,谁能解释它的目的是什么?
【问题讨论】:
-
如果您在
ContentValues中传递一个特殊参数,您可以在ContentProvider.insert()方法中同时使用INSERT和REPLACE过程。我在这里写了一篇关于它的博客文章:SQLite INSERT OR REPLACE through ContentProvider | Buzzing Android