如何处理从SQLite返回的null

时间:2010-10-17 09:39:20

标签: iphone objective-c sqlite

我在一个方法中使用它:

+ (void) getA:(NSString *)dbPath {

if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {



        const char *sql = "select a from a_table";
        sqlite3_stmt *selectstmt;
        if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {

            while(sqlite3_step(selectstmt) == SQLITE_ROW) {

                NSInteger primaryKey = sqlite3_column_int(selectstmt, 0);

                Coffee *coffeeObj = [[Coffee alloc] initWithPrimaryKey:primaryKey];
                coffeeObj.aString = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt,0)];
                coffeeObj.isDirty = NO;
                [appDelegate.aArray addObject:coffeeObj.aString];


                [coffeeObj release];
            }
        }
    }
    else
        sqlite3_close(database); 
}

当db有一行时,它可以正常工作,但是当它没有行时,它就会崩溃。

我需要知道的是,我如何处理我的代码,以便在DB中没有行时它可以正常工作。
当数据库中没有行时,我应该在代码中添加/修改什么才能正常运行?

此致

2 个答案:

答案 0 :(得分:1)

我知道这是一个非常古老的问题,但只是遇到了我自己的问题,并提出了一个非常简单的方法来解决这个问题。希望这可以帮助其他访客

在你的代码中

Coffee *coffeeObj = [[Coffee alloc] initWithPrimaryKey:primaryKey];
coffeeObj.aString = [self checkNullForSQLStatmentColoumn:sqlite3_column_text(selectstmt, 0)];



-(NSString *) checkNullForSQLStatmentColoumn : (const unsigned char *) coloumn{
    if(coloumn)
    {
        return [NSString stringWithUTF8String:(const char *)coloumn];
    }
    return @"";
}

答案 1 :(得分:0)

试试这个:检查某些东西是不是NSNull类型 if((NSNull *)YourResource != [NSNull null])