如何在我的iOS项目中添加和执行.sql文件?
我发现在iOS中使用SQLite数据库的许多教程,但还没有发现任何直接引用.sql文件的教程。 任何人都可以告诉我如何将现有的SQL数据库链接到我的应用程序?
编辑:这是一个MySQL转储。 我们有一个基于浏览器的闪存卡程序,我们现在正在为Android和iOS设备进行复制。 该文件已经有语句来创build表和填充数据,但我不知道如何在应用程序中使用该数据。 我可能想要使用NSSearchPathForDirectoriesInDomains?
我作为iOS项目的一部分执行脚本。 我这样做的原因是创build数据库模式的同一系列脚本也会更新数据库模式(在发布之后,运行新的增量脚本以将模式向前推进)。 这里详细解释:
使用Android的SQLITE(build立数据库的最佳方法)
我将脚本作为资源添加到项目中,然后执行它。 有一些EXxxx日志logging调用,但通用。 注意使用tail – sqlite在脚本循环时执行一个语句,将尾部作为标记停在尾部。 这是我用来执行的function:
- (BOOL)executeScript:(NSString *)contents error:(NSError **)error { ENHeading(@"executeScript"); sqlite3_stmt *stmt = NULL; const char *zTail; int rc; zTail = [contents UTF8String]; while(zTail != NULL && 0 < strlen(zTail)) { ENDebug("zTail: \"%s\"\n", zTail); NSString *tailStr = [NSString stringWithUTF8String:zTail]; NSString *trimmed = [tailStr stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; if ([trimmed length] == 0) { ENInfo("ignoring trailing whitespace"); break; } // Temporarily hold this until the end of the loop in case we need to report an error const char *newzTail; rc = sqlite3_prepare_v2(_sqlite3, zTail, -1, &stmt, &newzTail); if(SQLITE_OK != rc) { ENError(@"prepare err:%@", [self errorMessage]); if (error != NULL) { *error = [[[ENSqliteError alloc] initWithErrorCode:ENSqliteErrorInvalidSql reason:[self errorMessage]] autorelease]; } return NO; } rc = sqlite3_step(stmt); ENDebug(@"rc=%d", rc); switch (rc) { case SQLITE_ROW: ENError(@"statement returns rows, script ignores"); break; case SQLITE_OK: case SQLITE_DONE: break; default: ENError(@"error"); ENError(@"prepare err:%@", [self errorMessage]); if (error != NULL) { *error = [[[ENSqliteError alloc] initWithErrorCode:ENSqliteErrorReadingRows reason:[self errorMessage]] autorelease]; } return NO; } // For next time around the loop zTail = newzTail; // Clear up since we're about to prepare another sqlite3_finalize(stmt); } return YES; }