Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sqlite3查询删除特定id并对剩余id重新排序';s_Sqlite - Fatal编程技术网

sqlite3查询删除特定id并对剩余id重新排序';s

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

通过使用下面的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|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。