2015年第一個小bug,iOS數據庫操做問題

2015年第一個小bug,iOS數據庫操做問題

問題描述

以前運行程序正常,今日整理資料,竟然發現運行不出來,從數據讀取內容,而後使用表格時候顯示.結果程序運行後,模擬器一片空白,囧.ios

解決過程

使用終端命令能夠正常讀取出數據庫內容:git

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

能夠正常打開數據庫:github

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;
}

輸出:sql

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,打印下你的地址.
objectivecNSString *databasePath = [[NSBundle mainBundle]pathForResource:@"data" ofType:@"sqlite"];
        NSLog(@"%s [LINE:%d] databasePath=%@", __func__, __LINE__,databasePath);

輸出spa

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

  • 數據庫對象地址不爲空,可是數據庫對象的路徑字符串爲空?沒有找到文件?難道在工程中沒有這麼文件?code

  • 那麼,刪除這個文件,而後從新導入,sqlite

發現問題了:對象

image

文件沒有添加target!!!!!

問題的緣由:

因爲以前導入的時候,沒有使用拷貝.今天整理文檔,以前的工程文件路徑發生了改變,然而此工程的數據庫沒有拷貝,出現了找不到文件錯誤.

從新導入了下了文件,確認勾選了拷貝的選項.

今天的錯誤出如今沒有將文件添加到target中.

image

總結:

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

image

aa)處,若是不勾選,文件就不會拷貝到本工程中.(當原始文件路徑變化的時候,就會找不到文件)

bb)處,也就是今天的錯誤之處,若是不勾選,就不會添加到目標工程文件中.

相關文章
相關標籤/搜索