SQLiteDatabase如果更改则插入或替换

时间:2013-10-02 09:54:37

标签: android sqlite android-sqlite

我正在寻找一种方法来填充/更新我的SQLiteDatabase表。 在某些情况下,我需要得到通知(通过某些返回值)。每行包含一个需要稍后下载的文件的URL。

  1. 不存在:插入并通知我应列出此行以供下载。
  2. 行确实存在,但我尝试插入的那个包含相同的值,就像数据库中已有的那样:什么也不做,不要通知我这个应该下载。
  3. 存在,我试图插入的那个包含不同的值作为db中已有的值:替换此行,通知我这应该是下载。
  4. 我一直在寻找答案,但似乎找不到好的东西。我应该使用insertWithOnConflict()replace()replaceOrThrow(),......

    谢谢!

2 个答案:

答案 0 :(得分:2)

在一个sqlite事务中包含两个步骤:

  1. 通过rowid查询。如果没有找到rowid或没有结果,请插入新内容并下载。

  2. 比较步骤1中检索到的新行和新行的网址。仅当网址不同时,请更新行并下载,否则无操作。

答案 1 :(得分:0)

首先,查询数据库中是否存在值与光标&如果它为null,则进行插入,否则如果所需字段与您已有的字段不同,则进行更新。  在任何其他情况下什么也不做  //一些伪代码

Cursor cursor=_db.query("TABLE", null, TABLEID + "=?", new String[]{id}, null, null, null);


        if(cursor.getCount()<1) // row Not Exist
        {
            cursor.close();

               ....assign values

               SQLiteDatabase _db.insert("TABLE_Name", null, Table_object);

               download ...ok

        }

        cursor.moveToFirst();

           if( cursor[field] != "same_value" ) {

           SQLiteDatabase _db.update("TABLE_Name", null, Table_object);

            download ...ok 

           }