如何将SQLite表导入Core Data(SQLite也是如此)

时间:2013-04-29 07:49:45

标签: ios objective-c sqlite core-data

我有一个大型XML。如果我通过一条记录将它写入数据库,大概是2分钟。这个XML静态,永远不会更新。那么创建SQLite数据库并在Core Data中导入一个表可能会有用吗?我怎么能这样做?

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

1 个答案:

答案 0 :(得分:3)

从sqlite导入相当容易,但没有足够的文档记录恕我直言

  1. 打开您的应用并设置核心数据堆
  2. 打开要从中导入内容的旧版SQL数据库
  3. 获取要导入的数据并遍历所有行。
  4. 对于每一行,创建一个新的NSManagedObject并将其插入到您正在使用的managedObject上下文中 4A。用值设置它。
  5. 使用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);
    }