尝试从SQLite加载时应用程序崩溃

时间:2012-04-17 18:53:42

标签: ios sqlite

好吧,我正在对我制作的应用程序进行更新,但我遇到了一些运行时问题。人们说他们希望能够保存他们输入的数据,所以我正在实现一个SQLite数据库。如果数据库或数据库表不存在,我得到应用程序以检查数据库是否存在并创建所需的所有内容。但是,我在从SQLite中检索数据时遇到了麻烦。当我按下应该加载数据的按钮时,应用程序崩溃了。我尝试使用NSLog和UIAlertView来弄清楚发生了什么,但我无法检索结果。但是,在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);
    }
 }

该应用程序能够将数据保存到数据库,因为该应用程序显示“保存成功”消息,我为了用户的缘故添加了该消息以及查看事情是否正确完成,所以我不太清楚什么是继续。

1 个答案:

答案 0 :(得分:0)

在找到模拟器保存数据库的位置后,我发现了我的问题。我的问题不是加载数据,而是如何保存。谢谢你的帮助。