2011-03-08 67 views
1

當我嘗試運行我的程序時出現以下錯誤。任何我爲什麼得到它的原因?我已經嘗試了幾個小時,但我放棄了。謝謝!iPhone和sqlite查詢的問題

錯誤:

2011-03-08 19:18:29.967 iPhoneApp即可[2561:207] *終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因:「* + [NSString的stringWithUTF8String:]: NULL cString'

- (AnswerDTO *)findAnswerById:(NSInteger)primary_key { 
    AnswerDTO *dto = [[[AnswerDTO alloc] init] autorelease]; 

    sqlite3_stmt *statement = nil; 
    const char *sql = "SELECT * FROM klb_answers WHERE id = 7;"; 

    if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) == SQLITE_OK) { 
     sqlite3_bind_int(statement, 1, primary_key); 

     NSInteger answerId = sqlite3_column_int(statement, ANSWER_ID); 
     NSInteger answerQuestionId = sqlite3_column_int(statement, ANSWER_QUESTION_ID); 
     NSString *answerDescription = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, ANSWER_DESCRIPTION)]; 
     NSString *answerSerialNumber = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, ANSWER_SERIAL_NUMBER)]; 
     NSInteger answerIsCorrect = sqlite3_column_int(statement, ANSWER_IS_CORRECT); 

     dto.answerID = answerId; 
     dto.questionID = answerQuestionId; 
     dto.description = answerDescription; 
     dto.serialNumber = answerSerialNumber; 

     if (answerIsCorrect == 0) { 
      dto.isCorrect = NO; 
     } else { 
      dto.isCorrect = YES; 
     } 
    } else { 
     NSLog(@"Noe feil med statementet"); 
    } 

    sqlite3_finalize(statement); 

    return dto; 
} 
+1

只有受虐者在Objective-C中使用SQLite C API。 [使用FMDB](http://github.com/ccgus/fmdb)或[CoreData](http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/CoreData/cdProgrammingGuide.html) 。 – 2011-03-08 19:02:00

回答

2

它看起來並不像您正在「運行」您的查詢。你準備好了並綁定了你的參數,但你從來沒有運行過sqlite3_step()來執行查詢並得到響應。即使它是單個記錄或標量。

因此,您的列函數返回空值。

+0

JAgostoni:這是100%正確的!非常感謝!!! :) – LuckyLuke 2011-03-08 18:39:14

+0

不客氣。在我的第一個sqlite項目中發生了......每次都發生在我身上。我可以建議使用Core Data來保存數據庫嗎?或者甚至可能是sqlite(TouchSQL等)的許多包裝中的一個?使其更加面向對象。然而,沒有什麼比贏得尊重框架的第一次更加努力地學習困難( - )的方式:) – JAgostoni 2011-03-08 22:22:06