Запрос sqlite3 для удаления определенного идентификатора и переупорядочить оставшиеся идентификаторы - PullRequest
0 голосов
/ 21 февраля 2019

введите описание изображения здесь Удалите запись с Id: 2 и Name: Gosling из показанной ниже таблицы. После удаления записей, которые необходимо переупорядочить, обновите Id всех оставшихся записей с использованием приведенного ниже кода c.Но это не переупорядочение, а обновление одного и того же идентификатора для всей записи.Пожалуйста, помогите мне решить эту проблему.Заранее спасибо.

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 () этот метод заключается в удалении записи и обновлении оставшегося идентификатора.

 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...