【问题标题】:How to import SQLite table into Core Data(SQLite too)如何将 SQLite 表导入核心数据(SQLite 也是)
【发布时间】:2013-04-29 07:49:44
【问题描述】:

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

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

【问题讨论】:

  • 为什么要使用表格?本教程提供的解决方案有什么问题?
  • @Wain 我已经有一个 Core Data 数据库,我需要导入唯一的一个表
  • 所以这就像您的用户已经添加了一些数据并且您正在发布一些附加内容以添加到用户现有数据中。是什么让您认为从 SQLite 导入会比从 XML 导入更快?您是否分析过 XML 导入? XML 导入是否在后台线程(或两个)上运行?
  • @wain 如果表不只包含 000 的 100 行,它会更快 ^^ xml 真的很慢。

标签: ios objective-c sqlite core-data


【解决方案1】:

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

  1. 打开您的应用并设置核心数据堆栈
  2. 打开您要从中导入内容的旧 sql 数据库
  3. 获取要导入的数据并遍历所有行。
  4. 为每一行创建一个新的 NSManagedObject 并将其插入到您正在使用的 managedObject 上下文中 4a。使用值进行设置。

使用 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);
}

【讨论】:

  • 内联输入。只是一个例子
  • 我可以导入整个表格,而不是一行?
  • 问题是对数据库的写入时间很长,而不是解析XML
猜你喜欢
  • 1970-01-01
  • 2013-04-21
  • 2014-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多