重新排序表行SQLite UITableView

时间:2014-11-29 13:12:04

标签: ios mysql objective-c sqlite uitableview

我正在尝试订购UITableView行。我已经实现了必要的方法,它适用于我的可变数组。但是,我不知道如何将此更改应用于我的数据库。

我的数据库有favs列 CREATE TABLE favs(     id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,     w_name文字 );

我正在使用"插入或替换为favs(w_name)值('%@%');"用于向favs数据库插入新单词的语句。如何更改两个记录的id,以便我可以按id的顺序列出favs值,以便对它们进行排序。例如,我想从这个

更改我的表

ID | w_name

1 |苹果

2 |香蕉

3 |橙

ID | w_name

1 |苹果

3 |香蕉

2 |橙

如果密钥不是主要的,我可以通过使用来更改id 更新喜欢SET id =(CASE id WHEN 2 THEN 3 ELSE 2 END) WHERE id IN(2,3);

如果我喜欢这样,我每次插入记录时都需要自己计算id。那么,如何重新排序ID以便我将UITableView中的更改反映到数据库中。

2 个答案:

答案 0 :(得分:0)

在所有情况下,如果要重新排序TableView,您必须重新排序提供TableView的数组。 您可以再次执行查询。 或者使用那个

yourArray = [yourArray sortedArrayUsingComparator:^NSComparisonResult(TYPE *p1, TYPE *p2){
        return [p1 compare:p2];  
    }];

[tableView reloadData];

结束

答案 1 :(得分:0)

在表格中添加另一列并将其命名为sort。在那里,您将把每个记录的索引放在数组[array indexOfObject:object]中。每次要保存数组的顺序时,您都可以更新每个记录的排序列,例如 const char *sql = "UPDATE favs SET sort = ? WHERE id = ?"; if(sqlite3_prepare_v2(database, sql , -1, &updateStatment, NULL) != SQLITE_OK) NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(database)); sqlite3_bind_int(updateStatment, 1, [array indexOfObject:object]); sqlite3_bind_int(updateStatment, 2, [object id]);