注册 登录
主题 : 用FMDB管理Sqlite数据库总是数据丢失
级别: 侠客
UID: 609304
精华: 0
发帖: 179
可可豆: 611 CB
威望: 611 点
在线时间: 182(时)
注册时间: 2017-03-22
最后登录: 2019-06-17
0 楼:  发表于: 2019-06-14 17:41    发自: Web Page
来源于 一般提问 分类

用FMDB管理Sqlite数据库总是数据丢失   

用户反馈录入数据用了几天后,再打开APP,数据库的数据就会初始化,数据都丢失了。
请大家帮忙看一下我的代码有问题吗?我自己却没有发生这样的情况,目前反馈的用户大部分集中在iphone6和SE的机型

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  
  //调用数据库
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
    NSString *dbPath = [docPath stringByAppendingPathComponent:@"abc.db"];
    FMDatabase *db = [FMDatabase databaseWithPath:dbPath];
    
    if (db!=nil) {
        //NSLog(@"连接成功");
    }else{
        
    }
    
    [db open];
    if (![db open]) {
        
    }


if (!isTableExist(db, @"表名")) {
        
        BOOL result = [db executeUpdate:@"CREATE TABLE IF NOT EXISTS 表名 ();"];
        
        if (result) {
            //创表成功
            
        } else {
            
        }
        
    }

    [db close];

  
    //设置UI界面
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    
    rootMainViewController *rootVC = [[rootMainViewController alloc] init];
    self.window.rootViewController = rootVC;

    
    // 让window成为keyWindow(主窗口),并且可见
    //[self.window makeKeyAndVisible];
    
    

    
    
    return YES;
}


//判断数据库中的表是否存在
BOOL isTableExist(FMDatabase *db,NSString * tableName){
    
    FMResultSet *rs = [db executeQuery:@"select count(*) as 'count' from sqlite_master where type ='table' and name = ?", tableName];
    
    while ([rs next])
        
    {
        NSInteger count = [rs intForColumn:@"count"];
        //NSLog(@"isTableOK %d", count);
        
        if (0 == count){
            return NO;
        }else{
            return YES;
        }
    }
    
    return NO;
}
级别: 精灵王

状态: 连续签到 - [23天]
UID: 431391
精华: 0
发帖: 2189
可可豆: 2806 CB
威望: 2751 点
在线时间: 4506(时)
注册时间: 2015-01-20
最后登录: 2019-06-17
1 楼:  发表于: 2019-06-14 18:30    发自: Web Page
换个目录存   比如直接放  Library 下面   或者自己创建文件夹


cache 下的文件可能会被系统自动删除       比如手机空间不足的时候
级别: 侠客
UID: 609304
精华: 0
发帖: 179
可可豆: 611 CB
威望: 611 点
在线时间: 182(时)
注册时间: 2017-03-22
最后登录: 2019-06-17
2 楼:  发表于: 2019-06-15 15:42    发自: Web Page
回 1楼(Final_Sence) 的帖子
可是我看有一个用户反馈,他的手机是64G的,还剩下20多G,但一样数据丢失
级别: 侠客
UID: 609304
精华: 0
发帖: 179
可可豆: 611 CB
威望: 611 点
在线时间: 182(时)
注册时间: 2017-03-22
最后登录: 2019-06-17
3 楼:  发表于: 2019-06-15 15:43    发自: Web Page
回 1楼(Final_Sence) 的帖子
有一个用户,手机是64G的,剩余20多G,数据还是丢失了
级别: 侠客
UID: 609304
精华: 0
发帖: 179
可可豆: 611 CB
威望: 611 点
在线时间: 182(时)
注册时间: 2017-03-22
最后登录: 2019-06-17
4 楼:  发表于: 2019-06-15 15:44    发自: Web Page
有一个用户,手机是64G的,剩余20多G,数据还是丢失了。
级别: 精灵王

状态: 连续签到 - [23天]
UID: 431391
精华: 0
发帖: 2189
可可豆: 2806 CB
威望: 2751 点
在线时间: 4506(时)
注册时间: 2015-01-20
最后登录: 2019-06-17
5 楼:  发表于: 2019-06-17 09:45    发自: Web Page
回 4楼(sbqios2017) 的帖子
官方文档是这么写的     我也是照搬

重要数据不要存在 Cache 这样的目录下
级别: 新手上路

状态: 连续签到 - [1天]
UID: 512508
精华: 0
发帖: 22
可可豆: 74 CB
威望: 61 点
在线时间: 191(时)
注册时间: 2015-10-10
最后登录: 2019-06-17
6 楼:  发表于: 2019-06-17 10:26    发自: Web Page
你这应该每次都重新创建了, 你应该判断下表是否已存在, 如果存在, 就不重新创建了

CocoaChina社区转载内容已尽可能注明出处,如未能核实来源或转发内容图片有权利瑕疵的,请及时联系社区进行修改或删除【联系方式QQ : 3442093904 邮箱:support@cocoachina.com】文章内容为作者独立观点,不代表CocoaChina社区立场。版权归原作者所有,如申请授权请联系作者,因文章侵权CocoaChina社区不承担任何法律及连带责任。

描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部