sqlite3查询删除特定id并对剩余id重新排序';s
通过使用下面的c代码更新所有剩余记录的Id,删除要重新排序的记录后,从下表中删除Id为2、名称为Gosling的记录。但它不是重新排序,而是更新所有记录的相同Id。请帮我解决这个问题。 提前谢谢sqlite3查询删除特定id并对剩余id重新排序';s,sqlite,Sqlite,通过使用下面的c代码更新所有剩余记录的Id,删除要重新排序的记录后,从下表中删除Id为2、名称为Gosling的记录。但它不是重新排序,而是更新所有记录的相同Id。请帮我解决这个问题。 提前谢谢 Before delete Id|Name | MacId| State | Type ----------------------------- 1|Dennis|456731|NOT CONNECTED|NOT FAVORITE 2|Gosling|456731|NOT CONNECTED|N
Before delete
Id|Name | MacId| State | Type
-----------------------------
1|Dennis|456731|NOT CONNECTED|NOT FAVORITE
2|Gosling|456731|NOT CONNECTED|NOT FAVORITE
3|MOTO|4568971|NOT CONNECTED|NOT FAVORITE
4|KARBAN|4568971|CONNECTED|NOT FAVORITE
5|Lenovo|4568971|CONNECTED|NOT FAVORITE
After deleting 2nd record It should be like as shown in the below table.
Id|Name |MacId |State | Type
--------------------------------
1|Dennis|456731|NOT CONNECTED|NOT FAVORITE
2|MOTO|4568971|NOT CONNECTED|NOT FAVORITE
3|KARBAN|4568971|CONNECTED|NOT FAVORITE
4|Lenovo|4568971|CONNECTED|NOT FAVORITE
deleteDevice()此方法用于删除记录并更新剩余Id
void deleteDevice(char deviceId, char *table)
{
sqlite3 *db;
char *err_msg = 0;
sqlite3_stmt *res;
char query[100];
int rc = sqlite3_open("phonebook2.db", &db);
int lastDeveciId=getLastDeviceId(table);
if (rc != SQLITE_OK)
{
fprintf(stderr, "Cannot open database: %s\n",sqlite3_errmsg(db));
sqlite3_close(db);
return;
}
sprintf(query,"delete from %s where DEVICE_ID =%d;",table,deviceId) ;
rc = sqlite3_exec(db, query, NULL, 0, 0);
if (rc != SQLITE_OK) {
enter code here
fprintf(stderr, "Failed to fetch data: %s;\n", sqlite3_errmsg(db));
sqlite3_close(db);
return;
}
if(lastDeveciId > deviceId)
{
for(int i=deviceId;i<lastDeveciId;i++)
{
sprintf(query,"update %s set DEVICE_ID=%d where DEVICE_ID =%d",table,i-1,i);
printf("Query:%s\n",query);
printf("Breakpoint\n");
rc = sqlite3_exec(db, query, NULL, 0, 0);
update(table,i);
}
}
sqlite3_close(db);
}
int main()
{
deleteDevice(0x02,"paired_phones");
return 0;
}
void deleteDevice(char设备ID,char*表)
{
sqlite3*db;
char*err_msg=0;
sqlite3_stmt*res;
字符查询[100];
int rc=sqlite3_open(“phonebook2.db”、&db);
int lastdeviciid=getLastDeviceId(表);
如果(rc!=SQLITE_OK)
{
fprintf(stderr,“无法打开数据库:%s\n”,sqlite3_errmsg(db));
sqlite3_关闭(db);
返回;
}
sprintf(查询,“从%s中删除,其中设备\u ID=%d;”,表,设备ID);
rc=sqlite3_exec(db,query,NULL,0,0);
如果(rc!=SQLITE_OK){
在这里输入代码
fprintf(stderr,“无法获取数据:%s;\n”,sqlite3_errmsg(db));
sqlite3_关闭(db);
返回;
}
if(lastdevecid>deviceId)
{
对于(int i=deviceId;i请改进您的问题,这很难理解,请尝试将句子分开。向我们展示表格结构,以及“对剩余设备id重新排序”的含义?@danilo reorder:如果我从表中删除第二条记录,则假设表中有5条记录。然后将第三个Id更新为第二条,第四条更新为第三条,第五条更新为第四条,依此类推……表结构:创建表(设备\u ID整数唯一,设备\u名称文本为空,设备\u MAC\u ID文本为非空,状态文本为空默认为“未连接”,键入TEX NULL默认为“未收藏”);ids不是以这种方式工作的,但您可以创建一个视图或查询来列出按顺序获取id的记录,并且在代码中您可以处理id。设备列表显示在信息娱乐显示屏上的上述表格中。当您按下显示屏上的设备名称时,我们将从显示屏上获取设备id作为请求。例如:如果u按下2个要删除的终端设备名称,则设备Id将为2。正如您所说的“按顺序列出获取Id的记录”.现在在表2中,第三位第三台设备,第三位第四台设备,依此类推。如果您现在想删除第三台设备,表中的实际设备Id是4。请改进您的问题,这很难理解,请尝试将句子分开。向我们展示表结构,以及“重新排列剩余设备Id”的含义?@danilo reorder:如果我从表中删除第二条记录,则假设表中有5条记录。然后将第三个Id更新为第二条,第四条更新为第三条,第五条更新为第四条,依此类推……表结构:创建表(设备\u ID整数唯一,设备\u名称文本为空,设备\u MAC\u ID文本为非空,状态文本为空默认为“未连接”,键入TEX NULL默认为“未收藏”);ids不是以这种方式工作的,但您可以创建一个视图或查询来列出按顺序获取id的记录,并且在代码中您可以处理id。设备列表显示在信息娱乐显示屏上的上述表格中。当您按下显示屏上的设备名称时,我们将从显示屏上获取设备id作为请求。例如:如果u按下要删除的2个终端设备名称,则设备Id将为2。正如您所说的“按顺序列出获取Id的记录”。现在,在表2中,终端设备位于第3位,第3位,第4位,依此类推。如果您现在要删除第3个设备,则表中的实际设备Id为4。