0
我在我的表中有12列。最近添加了兩列。我使用sqlite3數據庫。如果我對最後創建的兩個新列以外的任何其他列使用where子句,則會創建數據庫並正確執行查詢。最後兩列返回NULL字符串這使得應用程序崩潰扔終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',理由是: ' * + [NSString的stringWithUTF8String:]:NULL CSTRING' * *Sqlite準備聲明
當該查詢在SQL管理器中執行,我可以檢索最後兩列。我想在我的準備聲明中有些地方出了問題。
NSString *query = @"select * from tableName where lastColumn = 'Value'";
const char *sqlStatement = [query UTF8String];
sqlite3_stmt *compiledStatement;
NSLog(@"could not prepare statement: %s\n", sqlite3_errmsg(database));
if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
// Loop through the results and add them to the feeds array
while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
}
請幫我解決這個問題。我完全不知道在最後兩個欄都消失了.. :)
但是,它不會進入準備語句循環來檢查字符串是否爲NULL。您希望我在準備聲明前執行此操作?如果我在準備聲明中沒有這樣做,如何循環訪問數據庫? –
您收到的錯誤與準備聲明完全無關。你的錯誤是關於NSString,而sqlite只是簡單的C api,它不分配NSStrings –
如果我使用最後兩列中的任何一個作爲WHERE子句的值,它甚至不會進入準備語句循環。如果我使用除最後兩列以外的任何其他列值作爲我的WHERE子句值,那麼當我嘗試檢索最後兩列值時,它將進入prepare語句循環內,並且應用程序崩潰引發NSInvalidArguementException。這是我的問題。對不起,以前沒有給你清晰的想法.. –