有没有办法在SQLite-manager中重新排序列?

时间:2011-08-10 14:13:45

标签: iphone objective-c sqlite

我有一个包含大量数据的.csv文档。它有71个不同的列。

现在我想将此数据导入Core Data。但是当我在xcdatamodel中创建属性时,属性按其名称排序,而不是按照我希望它们的顺序排序。因此,当创建.sqlite文件时,列的顺序错误。我试图在SQLite-manager中对它们进行排序,但是当我重新打开.sqlite时,列的顺序与更改前的顺序相同。

有没有办法在SQLite-manager中重新排序列?

1 个答案:

答案 0 :(得分:1)

嗯,71列非常多。由于您使用的是Core Data,我建议尝试对其进行非规范化处理。核心数据不是表格数据库。也就是说,我建议跟踪当前列,并将数据存储在一个数组中。然后,根据需要将数据分成NSManagedObjects。

修改

让我们假设你的sqlite数据库按顺序有三列:firstNamelastNamemiddleInitial。现在假设您的CSV文件的顺序不同,例如lastNamemiddleInitialfirstName。您可能重新排序CSV文件或sqlite文件,但由于您使用的是Core Data,因此您可以采用其他方式。

您将拥有一个包含所有属性的实体。在我的例子中,它是“人”实体。因此,我们继续创建此Person实体的实例。

Person *newPerson = [[Person alloc] initWithEntity:[NSEntityDescription entityForName:@"Person" inManagedObjectContext:context] insertIntoManagedObjectContext:context];

现在,您需要维护对此Person实例的引用,以便在解析CSV时可以访问它。我推荐Dave DeLong的CHCSVParser library。从本质上讲,它允许基于事件的CSV文件解析。

当您点击新字段时,请检查它是哪个字段编号。你可以通过保持currentField变量来实现这一点,当你点击一个新行时将它重置为零,并在每个字段上递增。现在,当您点击某个字段时,如果该数字为0或第一个字段,则设置newPerson.lastName。如果是第二个字段,则指定newPerson.middleInitial。而且,如果您点击第三个字段,则设置newPerson.firstName。这个想法是你可以在不触及sqlite数据库的情况下分配持久属性。如果您正在使用Core Data,那么这就是您的选择。