• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - SQLite 数据库始终为空 (FMDB)

[复制链接]
菜鸟教程小白 发表于 2022-12-12 12:33:54 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在做一个非常经典的例程,我已经做过很多次了,但是在这个项目中,它不起作用。当我想使用我的数据库时,我得到“没有这样的表”错误。这应该是错的。我检查了捆绑数据库及其罚款;我检查了手机中的“结果”数据库,它完全是空的(没有结构,显然也没有数据)。

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

+ (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 数据库,在那里创建了结构,然后将其导入到包中。

注意:成功总是返回 true。

欢迎任何帮助!



Best Answer-推荐答案


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

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

//
// 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap