我在一个方法中使用它:
+ (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中没有行时它可以正常工作。
当数据库中没有行时,我应该在代码中添加/修改什么才能正常运行?
此致
答案 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])