如何在我的iOS项目中添加和执行.sql文件?(How to add and execute .sq

2019-09-20 13:53发布

我发现在iOS的使用SQLite数据库很多教程,但没有发现任何东西,直接引用.sql文件。 谁能告诉我怎么可以将现有的SQL数据库链接到我的应用程序?

编辑:这是一个MySQL转储。 我们有一个基于浏览器的烧录程序,其中我们现在复制Android和iOS设备。 该文件已经语句来创建表,填充数据,但我不知道如何使用应用程序内的数据。 我是否可以这样用NSSearchPathForDirectoriesInDomains?

Answer 1:

我执行脚本作为iOS的项目的一部分。 我这样做的原因是同一系列的脚本创建数据库架构还更新数据库架构(发布后,新河三角洲脚本运行拉动的模式前进)。 它在这里详细解释:

SQLITE与Android(用于建立数据库最好的方法)

我添加脚本作为项目的资源,然后执行它。 这里也有一些EXxxx记录电话,但另有通用。 注意使用尾 - 源码在脚本尾部作为标记离开的地方通过循环的时候执行的语句。 下面是我用它来执行函数:

- (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;
}


文章来源: How to add and execute .sql files in my iOS project?