2015年第一个小bug,iOS数据库操作问题

2015年第一个小bug,iOS数据库操作问题

问题描述

之前运行程序正常,今日整理资料,居然发现运行不出来,从数据读取内容,然后使用表格时候显示.结果程序运行后,模拟器一片空白,囧.

解决过程

使用终端命令可以正常读取出数据库内容:

objectiveczx:1227_database_readdata-and-showtable zx$ sqlite3 data.sqlite
SQLite version 3.8.5 2014-08-15 22:37:57
Enter ".help" for usage hints.
sqlite> .header on
sqlite> .mode column
sqlite> .table
firstlevel   leaflevel    secondlevel  studytable   testtable  
sqlite> select * from firstlevel;
serial      pid         pname                                               pcount    
----------  ----------  --------------------------------------------------  ----------
1           1           道路交通安全法律、法规和规章(185题)  16        
2           2           交通信号及其含义(158题)                    8         
3           3           安全行车、文明驾驶知识(159题)           8         
4           4           高速公路、山区道路、桥梁、隧道、?  10        
5           5           出现爆胎、转向失控、制动失灵等紧?  23        
6           6           机动车总体构造和主要安全装置常识?  6         
7           7           发生交通事故后的自救、急救等基本?  4

可以正常打开数据库:

objectivec-(id)init{
    if (self  = [super init]) {
        NSString *databasePath = [[NSBundle mainBundle]pathForResource:@"data" ofType:@"sqlite"];
        _database = [[FMDatabase alloc]initWithPath:databasePath];
        if (_database.open == NO) {
            NSLog(@"%s [LINE:%d] open database from %@ failed.", __func__, __LINE__,databasePath);
        }
        else
        {
            NSLog(@"%s [LINE:%d] open database successed", __func__, __LINE__);
        }
    }
    return self;
}

输出:

objectivec2015-01-02 21:22:18.996 1227_database_readdata-and-showtable[28988:1117979] -[ZXDatabase init] [LINE:52] open database successed
2015-01-02 21:22:18.997 1227_database_readdata-and-showtable[28988:1117979] -[ZXDatabase firstLevelTable_Marray] [LINE:69] resultSet=(null)
2015-01-02 21:22:18.997 1227_database_readdata-and-showtable[28988:1117979] -[ZXDatabase firstLevelTable_Marray] [LINE:75] _firstLevelTable_Marray=(
)

初步判定.1)数据库打开成功.2)没有从数据库中读取出内容来.

  • 难道和数据库sql查询语句的大小写有关?
objectivecNSString *selectAllFromFirstLevelTable_sqlString = @"SELECT * FROM firstlevel";

修改后仍然没有查找到错误出处.

  • 在数据库对象处设置断点,发现数据库对象path为空.
objectivec-(NSMutableArray *)firstLevelTable_Marray{

    if(_firstLevelTable_Marray == nil){
        _firstLevelTable_Marray = [[NSMutableArray alloc]init];
        NSString *selectAllFromFirstLevelTable_sqlString = @"SELECT * FROM firstlevel";
        NSLog(@"%s [LINE:%d] _database=%@", __func__, __LINE__,_database);
        FMResultSet *resultSet = [_database executeQuery:selectAllFromFirstLevelTable_sqlString];
        NSLog(@"%s [LINE:%d] resultSet=%@", __func__, __LINE__,resultSet);
        while (resultSet.next) {
            ZXFirstLevelDataModel *firstLevelDataModel = [ZXFirstLevelDataModel modelWithOneRow:resultSet];
            NSLog(@"%s [LINE:%d] firstLevelDataModel = %@", __func__, __LINE__,firstLevelDataModel);
            [_firstLevelTable_Marray addObject:firstLevelDataModel];
        }
        NSLog(@"%s [LINE:%d] _firstLevelTable_Marray=%@", __func__, __LINE__,_firstLevelTable_Marray);
    }
    return _firstLevelTable_Marray;
}

image

  • 如果数据库对象地址为空?ok,打印下你的地址.
objectivec        NSString *databasePath = [[NSBundle mainBundle]pathForResource:@"data" ofType:@"sqlite"];
        NSLog(@"%s [LINE:%d] databasePath=%@", __func__, __LINE__,databasePath);

输出

objectivec2015-01-02 21:38:52.899 1227_database_readdata-and-showtable[29249:1128299] -[ZXDatabase init] [LINE:46] databasePath=(null)
2015-01-02 21:38:52.900 1227_database_readdata-and-showtable[29249:1128299] -[ZXDatabase init] [LINE:53] open database successed
2015-01-02 21:38:52.901 1227_database_readdata-and-showtable[29249:1128299] -[ZXDatabase firstLevelTable_Marray] [LINE:69] _database=<FMDatabase: 0x7a82eee0>

image

  • 数据库对象地址不为空,但是数据库对象的路径字符串为空?没有找到文件?难道在工程中没有这么文件?

  • 那么,删除这个文件,然后重新导入,

发现问题了:

image

文件没有添加target!!!!!

问题的原因:

由于之前导入的时候,没有使用拷贝.今天整理文档,之前的工程文件路径发生了改变,然而此工程的数据库没有拷贝,出现了找不到文件错误.

重新导入了下了文件,确认勾选了拷贝的选项.

今天的错误出现在没有将文件添加到target中.

image

总结:

在向工程添加已有文件的时候.

image

aa)处,如果不勾选,文件就不会拷贝到本工程中.(当原始文件路径变化的时候,就会找不到文件)

bb)处,也就是今天的错误之处,如果不勾选,就不会添加到目标工程文件中.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值