gpt4 book ai didi

iphone - 将以前创建的 Sqlite 数据库写入 iOS 文档的最佳方法是什么

转载 作者:行者123 更新时间:2023-11-28 18:14:18 24 4
gpt4 key购买 nike

我有一个以前创建的 Sqlite 数据库文件,我将其与 iOS 应用程序捆绑在一起。我的问题是,将此数据写入手机的最佳方式是什么,以便我可以从那里的应用程序更改表格?

我的研究表明我可能需要遍历整个 .sql 文件并在手机上手动插入/创建必要的表和值。

有没有办法只把数据库写入内部存储,然后再操作呢?

最佳答案

您可以将其添加到项目中的支持​​文件中,如果该文件不存在,则将其复制为模板数据库,然后打开它。打开它后,您可以用它做任何您想做的事。

这是我的一个示例项目中的一些示例代码,它可以执行此操作。在我的示例中,它是一个联系人数据库。注意 ensurePrepared 将如何从包中复制它(如果它不存在)。我复制到库路径,但您可以复制到文档路径。

- (BOOL)ensureDatabaseOpen: (NSError **)error
{
// already created db connection
if (_contactDb != nil)
{
return YES;
}

NSLog(@">> ContactManager::ensureDatabaseOpen");
if (![self ensureDatabasePrepared:error])
{
return NO;
}

const char *dbpath = [_dbPath UTF8String];
if (sqlite3_open(dbpath, &_contactDb) != SQLITE_OK &&
error != nil)
{
*error = [[[NSError alloc] initWithDomain:@"ContactsManager" code:1000 userInfo:nil] autorelease];
return NO;
}

NSLog(@"opened");

return YES;
}

- (BOOL)ensureDatabasePrepared: (NSError **)error
{
// already prepared
if ((_dbPath != nil) &&
([[NSFileManager defaultManager] fileExistsAtPath:_dbPath]))
{
return YES;
}

// db in main bundle - cant edit. copy to library if !exist
NSString *dbTemplatePath = [[NSBundle mainBundle] pathForResource:@"contacts" ofType:@"db"];
NSLog(@"%@", dbTemplatePath);

NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
_dbPath = [libraryPath stringByAppendingPathComponent:@"contacts.db"];

NSLog(@"dbPath: %@", _dbPath);

// copy db from template to library
if (![[NSFileManager defaultManager] fileExistsAtPath:_dbPath])
{
NSLog(@"db not exists");
NSError *error = nil;
if (![[NSFileManager defaultManager] copyItemAtPath:dbTemplatePath toPath:_dbPath error:&error])
{
return NO;
}

NSLog(@"copied");
}

return YES;
}

关于iphone - 将以前创建的 Sqlite 数据库写入 iOS 文档的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7883435/

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