我有重复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但如何编写查询更新当前光标位置记录。
答案 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也会自动递增主键字段。