2012-04-17 86 views
0

嗯,我正在更新我創建的應用程序,但我遇到了一些運行時問題。人們說他們希望能夠保存他們輸入的數據,所以我正在實施一個SQLite數據庫。如果數據庫或數據庫表不存在,我得到應用程序來檢查數據庫是否存在並創建所需的所有內容。但是,我有麻煩從SQLite中檢索數據。當我按下應該加載數據的按鈕時,應用程序崩潰。我試圖使用NSLog和UIAlertView來找出發生了什麼,但我無法檢索結果。但是,在SQLite中執行測試運行時,我發佈的查詢是正確的,因此必須有其他內容。嘗試從SQLite加載時應用程序崩潰

下面是我使用檢索數據的代碼:

- (IBAction)loadData 
{ 
    NSDateFormatter* bf = [[NSDateFormatter alloc] init]; 
    [bf setDateFormat:@"MM/dd/yyyy"]; 
    NSDate* sdate; 
    NSString* birthDate; 
    NSString* balance; 
    NSString* dyear; 

    sqlite3_stmt *stmt; 

    // get document directory 
    NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *docsDir = [dirPaths objectAtIndex:0]; 

    // build path to database 
    dbpath = [[NSString alloc] initWithString:[docsDir stringByAppendingPathComponent:@"mrd.db"]]; 

    const char *dpath = [dbpath UTF8String]; 

    if (sqlite3_open(dpath, &mrdDB) == SQLITE_OK) 
    { 
     NSString* query = [NSString stringWithFormat:@"SELECT date(birth), bal, year FROM rmd LIMIT 1"]; 
     const char* query_statement = [query UTF8String]; 

     if (sqlite3_prepare_v2(mrdDB, query_statement, -1, &stmt, NULL) == SQLITE_OK) 
     { 
      if (sqlite3_step(stmt) == SQLITE_ROW) 
      { 
       birthDate = [[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(stmt, 1)]; 
       balance = [[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(stmt, 2)]; 
       dyear = [[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(stmt, 3)]; 

       sdate = [bf dateFromString:birthDate]; 

       self.birth.text = [bf stringFromDate:sdate]; 
       [birthDate release]; 
       [bf release]; 

       self.bal.text = balance; 
       [balance release]; 

       self.year.text = dyear; 
       [dyear release]; 

       self.status.text = @"data loaded sucessfully"; 

      } else { 
       self.status.text = @"Cannot find/retrieve saved data"; 
      } 
      sqlite3_finalize(stmt); 
     } 
     sqlite3_close(mrdDB); 
    } 
} 

該應用程序能夠將數據保存到數據庫中,作爲應用顯示「保存成功」的消息,這是我增加了對用戶的緣故以及如果事情做得對,所以我不太確定發生了什麼。

+0

錯誤說的是什麼? – PaulG 2012-04-17 18:55:09

+0

報告的錯誤指向「int retVal = UIApplicationMain(argc,argv,nil,nil);」並且錯誤是「Program received signal:'SIGABRT'」(單引號在這裏用雙引號括起來)。 – user1013391 2012-04-17 18:57:16

+0

看看你的堆棧,找到有問題的代碼行。或者同樣簡單,在這個例程中設置一個調試斷點並逐步完成,看看你有什麼問題。我想知道如何將日期檢索爲字符串,將其轉換爲日期並將其轉換回字符串。例如,如果sdate是零(因爲它符合你的dateformatter格式字符串),我不會感到驚訝。我不知道。但是,通過這個例程一步,你的問題就會跳出來。 – Rob 2012-04-18 02:47:31

回答

0

我發現我的問題,找到模擬器保存數據庫的位置後。我的問題不是加載數據,而是如何保存。謝謝您的幫助。

相關問題