如何将SQLite表导入核心数据(SQLite)

问题描述:

我有一个大的XML。如果我通过一条记录将它写入数据库,大约2分钟。这个XML静态的,它永远不会更新。因此,创建SQLite数据库并在Core Data中导入一个表可能很有用?我怎样才能做到这一点?如何将SQLite表导入核心数据(SQLite)

我看到这个教程(Core Data on iOS 5 Tutorial: How To Preload and Import Existing Data),它并没有说如何导入表

+1

你为什么要使用一个表?本教程提供的解决方案有什么问题? – Wain 2013-04-29 07:56:40

+0

@Wain我已经有一个核心数据数据库,我需要导入唯一的一个表 – wiruzx 2013-04-29 08:00:00

+0

因此,这就像您的用户已经添加了一些数据,您将发布一些额外的内容添加到用户现有的数据。是什么让你认为从SQLite导入会比从XML导入更快?你有没有分析XML导入?并且在后台线程(或两个)上运行XML导入? – Wain 2013-04-29 08:12:34

从sqlite的进口是相当容易的,但没有记录足够恕我直言

  1. 打开你的应用程序,并成立了核心数据堆栈
  2. 打开您想从中导入东西的遗留SQL数据库
  3. 获取要导入的数据并遍历所有行。
  4. 为每一行创建一个新的NSManagedObject并将其插入到您正在使用的managedObject上下文中。设置它的值。使用FMDB

它会像:

NSManagedObjectContext *mom = ... ; //your mom 


FMDatabase *db = [FMDatabase databaseWithPath:libraryDatabase]; 
if(![db open]) { 
    ddprintf(@"Failed to open database at %@", libraryDatabase); 
    return; 
} 

if(![db beginTransaction]) { 
    ddprintf(@"Failed to start Transaction to update database: %d, %@", db.lastErrorCode, db.lastErrorMessage); 
    [db close]; 
    return; 
} 

id sql = @"SELECT modelId,imagePath,fileVolumeUuid FROM RKMaster"; 
FMResultSet *resultSet = [db executeQuery:sql]; 
while ([resultSet next]) { 
    //get row values 
    NSString *modelId = [row stringForColumn:@"modelId"]; 
    NSString *orgFilename = [row stringForColumn:@"imagePath"]; 

    //new MOC 
    MyEntity *entity = [mom insertNewObjectForEntity:@"myEntity"]; 
    entity.modelId = modelId; 
    entity.orgFilename = orgFilename; 
} 

if(![db commit]) { 
    ddprintf(@"Failed to commit database transaction: %d,%@", [db lastErrorCode], [db lastErrorMessage]); 
} 

if(![db close]) { 
    ddprintf(@"Failed to propertly close database at %@", libraryDatabase); 
} 
+1

。只是一个例子 – 2013-04-29 08:28:12

+1

我可以导入整个表,而不是一行? – wiruzx 2013-04-29 09:23:22

+1

不知道如何..你需要将行映射到mocs – 2013-04-29 09:31:25