gpt4 book ai didi

ios - SQLite 数据库总是空的 (FMDB)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:02:58 24 4
gpt4 key购买 nike

我正在做一个我已经做过多次的非常经典的例程,但在这个项目中,它不起作用。当我想使用我的数据库时,出现“No such tables”错误。哪个应该是错的。我检查了 bundle 数据库,没问题;我检查了手机中的“结果”数据库,它完全是空的(没有结构,显然也没有数据)。

这是我的数据库创建例程。每次我需要数据库时我都会调用它。

+ (FMDatabase*)createAndCheckDataBase{
BOOL success;
NSArray *docPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [docPaths objectAtIndex:0];
NSString *databasePath = [documentsDir stringByAppendingPathComponent:@"database.sqlite"];
NSFileManager *fileManager = [NSFileManager defaultManager];
success = [fileManager fileExistsAtPath:databasePath];

//The database already exist in the application folder, we don't need to create it
if(success){
return [FMDatabase databaseWithPath:databasePath];
}

NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"database.sqlite"];
[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];

return [FMDatabase databaseWithPath:databasePath];

然后我只需执行 FMDatabase *db = [DatabaseManager createAndCheckDatabase];,然后我应该得到我的数据库。但我不知道。

我使用 Firefox 的 SQLite Manager 插件创建了 sqlite 数据库,在那里创建了结构,然后将其导入到包中。

注意:成功总是返回真。

欢迎任何帮助!

最佳答案

如评论所述,您需要检查副本。

这是我的代码片段,它检查复制是否成功并将错误详细信息返回给消费者

//
// notice our method to prepare the db returns bool and doesn't lose the error details
// the consumer can log, present, whatever - this is a library function
//
- (BOOL)ensureDatabasePrepared: (NSError **)error
{
// <snip bunch of code>

// copy db from template to library
if (![[NSFileManager defaultManager] fileExistsAtPath:_dbPath])
{
NSLog(@"db not exists");

// notice how we pass in the error ref passed to this function
if (![[NSFileManager defaultManager] copyItemAtPath:dbTemplatePath toPath:_dbPath error:error])
{
return NO;
}

NSLog(@"copied");
}

关于ios - SQLite 数据库总是空的 (FMDB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26778172/

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