gpt4 book ai didi

ios - 如何在我的 iOS 项目中添加和执行 .sql 文件?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:06:53 25 4
gpt4 key购买 nike

我找到了很多关于在 iOS 中使用 SQLite 数据库的教程,但没有找到任何直接引用 .sql 文件的教程。谁能告诉我如何将现有 SQL 数据库链接到我的应用程序?

编辑:这是一个 MySQL 转储。我们有一个基于浏览器的抽认卡程序,我们现在正在为 Android 和 iOS 设备复制它。该文件已经包含创建表格和填充数据的语句,但我不知道如何在应用程序中使用该数据。我可能想使用 NSSearchPathForDirectoriesInDomains 吗?

最佳答案

我将脚本作为 iOS 项目的一部分执行。我这样做的原因是创建数据库模式的同一系列脚本也更新了数据库模式(发布后,运行新的增量脚本以将模式向前拉)。这里有详细解释:

SQLITE with Android (best methodology for setting up a database)

我将脚本作为资源添加到项目中,然后执行它。有一些 EXxxx 日志记录调用,但其他方面是通用的。请注意 tail 的使用 - sqlite 在脚本循环执行语句时使用 tail 作为它停止的标记。这是我用来执行的函数:

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

关于ios - 如何在我的 iOS 项目中添加和执行 .sql 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11750631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com