更新当前光标位置记录Sql

时间:2015-07-16 18:55:03

标签: android sql sqlite

我有重复id记录的表。我写了一个查询来获取所有具有相同id的记录。现在我想更新记录ID,如下所示

CREATE TABLE Student1
    (`id` int,`status` int,`amount` int , `Name` varchar(10), `date` varchar(55))
;

INSERT INTO Student1
    (`id`,`status`,`amount`, `Name`, `date`)
VALUES
    (1,0,4500, 'ram', '04/02/2012'),
    (2,0,2000, 'shyam', '05/09/2013'),
    (2,0,6500, 'radhe', '11/11/2014'),
    (2,0,8000, 'radheshyam', '15/11/2013'),
    (4,0,1500, 'ghanshyam', '08/11/2014')
;

id  status  amount  Name         date
1   0       4500    ram         04/02/2012
2   0       2000    shyam       05/09/2013
2   0       6500    radhe       11/11/2014
2   0       8000    radheshyam  15/11/2013
4   0       1500    ghanshyam   08/11/2014

SqlQuery类:

SELECT * FROM Student1
   where id in (SELECT id FROM Student1 GROUP BY id HAVING count(*)>1)

预期结果:

   id status    amount     Name        date
   2    0       2000      shyam      05/09/2013
   2    0       6500      radhe      11/11/2014
   2    0       8000    radheshyam   15/11/2013

现在我想将任意两个记录ID更新为21,211。所以我试图获得将返回的光标计数3.在计数后我移动到位置2以更改其ID但如何编写查询更新当前光标位置记录。

2 个答案:

答案 0 :(得分:0)

我正在测试它,但这会让你继续前进。

cursor.moveToFirst();
while ( !cursor.isAfterLast()) {
   // update whatever you want here
   db.getWritableDatabase().update(
            //TABLE_NAME,
            //values,
            //whereclause,
            //args
    );
 cursor.moveToNext()
}

从每个位置的光标获取值并进行更新。此操作应在主线程之外完成。你可以使用asynctask。

但是你不应该创建带有ID重复的DB记录。在创建表格时添加AUTOINCREMENT语句。

答案 1 :(得分:0)

无法以这种方式更新记录,因为没有主键字段可以使用where子句。始终将id字段标记为主键以避免此类情况。您可以做的最好的事情是找到这些条目,存储日期或名称,这是唯一的,然后在where子句中使用它来更改ID。

do(cursor.moveToFirst()) {
   //store the name or Date and call a method on the database
   // to update the entry to set new id where name equals to this name.

} while(cursor.moveToNext());

通过将id字段标记为主键来避免此类情况。即使没有明确提及,SQLite也会自动递增主键字段。