2010-10-17 73 views
0

返回null我在方法中使用這樣的:如何處理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中沒有行時,我應該添加/修改哪些內容以正確運行?

問候

+0

我編輯了自己的問題,但你可能想使用某種法術你的瀏覽器中檢查... – 2010-10-17 10:06:13

回答

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 @""; 
} 
0

試試這個:檢查自己是不是NSNull型 if((NSNull *)YourResource != [NSNull null])

+0

謝謝JonLOo,但對不起,我沒有想通了,我應該在哪裏添加這個?你可以指出我的代碼,我應該寫這個地方?謝謝 – iscavengers 2010-10-17 11:52:58

+0

你應該把一個if之前檢查,如果sqlite3_step(selectstmt)是不同於NSNull我猜 – JonLOo 2010-10-17 17:48:17