2017-08-16 39 views
0

我創建SQLite數據庫如下刪除行後如何重置Sqlite ID值?

 NSString * sqlStmt [email protected]"CREATE TABLE IF NOT EXISTS SONGS (ID INTEGER PRIMARY KEY AUTOINCREMENT, MOVIENAME TEXT, SONGNAME TEXT)"; 

在數據庫中刪除第7行後的ID值是1,2,3,4,5,6,8,9 ......通過使用下面的代碼,其中的ID號= 7。

const char *dbpath = [databasePath UTF8String]; 
if (sqlite3_open(dbpath, &_SQliteDB) == SQLITE_OK) 
{ 

    NSString *sql = [NSString stringWithFormat:@"delete from SONGS where ID=%d",idNumber]; 
    const char *del_stmt = [sql UTF8String]; 
    char *error ; 
    if (sqlite3_exec(_SQliteDB,del_stmt, NULL, NULL, &error) == SQLITE_OK) 
    { 
     NSLog(@"sucessfully delete"); 

    } else 
    { 
     NSLog(@"unable to delete"); 
    } 
    sqlite3_close(_SQliteDB); 
} 

else 
{ 
    NSLog(@"unable to open"); 
} 

我需要重新安排順序爲1,2,3,4,5,6,7,8? 任何幫助,將不勝感激。

+1

您不能修改AUTOINCREMENT字段。請添加一個新的int列(如「訂購」)進行訂購,然後您可以添加一個訂單值爲7的新行。 –

回答

0

如果您想要按順序進行訂購,則您正在尋找ORDER BY。

刪除後,恢復使用select查詢記錄,如下圖所示:

NSString *select = @"SELECT * FROM SONGS ORDER BY ID" 

有關ORDER BY更多信息,請參考link1以及如何在iOS中使用它,請參閱link2

+0

ThankYou。我在Link1和Link2中得到了足夠的支持 – Abhiram

1

你不應該重新排列ID,因爲其他表可能有這個ID的參考。因爲如果你有能力做到這一點,那麼下一個問題就會出現在你面前。

例如: - 你有1,2,3行,你刪除2,然後你有1,3。現在問題是當你要添加新的項目,它開始於4而不是3.

在你的情況,我建議使用Row_Number如果是出於顯示原因。

在數據庫中存在差距沒有問題。