2015-06-25 4 views
0

Я пытаюсь обновить таблицу в моей базе данных sqlite в приложении iOS. Раньше я использовал это заявление для обновления, и он сработал. Операция ниже возвращает значение sqlite commit 0, НО все поля в обновляемой строке устанавливаются на «< null>». У меня нет сообщения об ошибке ...Оператор обновления Sqlite в Xcode не работает

Что не так с заявлением?

-(void) UpdateSMUser :(NSString *) tableName 
     withField1:(NSString *) field1 
     field1Value:(NSString *) field1Value 
     andField2:(NSString *) field2 
     field2Value:(NSString *) field2Value 
     andField3:(NSString *) field3 
     field3Value:(NSString *) field3Value 
     andField4:(NSString *) field4 
     field4Value:(NSString *) field4Value 
{ 

[self openDB]; 

sqlite3_stmt *updateStmt; 
NSString *sql = [NSString stringWithFormat:@"UPDATE SMUser SET UserID = ?, Profile = ?, SMReg = ?, Date = ? WHERE UserID = '%@'" ,field1Value]; 

if (sqlite3_prepare_v2(db, [sql UTF8String] , -1, 
         &updateStmt, NULL) == SQLITE_OK) 
{ 

    sqlite3_bind_text(updateStmt, 1, [field1Value UTF8String], -1, SQLITE_TRANSIENT); 
    sqlite3_bind_text(updateStmt, 2, [field2Value UTF8String], -1, SQLITE_TRANSIENT); 
    sqlite3_bind_text(updateStmt, 3, [field3Value UTF8String], -1, SQLITE_TRANSIENT); 
    sqlite3_bind_text(updateStmt, 4, [field4Value UTF8String], -1, SQLITE_TRANSIENT); 
} 

// [self openDB]; 
char* errmsg; 
NSLog(@"sqlite commit %d",sqlite3_exec(db, [sql UTF8String], NULL, NULL, &errmsg)); 
sqlite3_exec(db, [sql UTF8String], NULL, NULL, &errmsg); 

if(SQLITE_DONE != sqlite3_step(updateStmt)){ 
    NSLog(@"Error while updating. %s", sqlite3_errmsg(db)); 
} 
else{ 
    // [self clearClick:nil]; 
} 
sqlite3_finalize(updateStmt); 
sqlite3_close(db); 
} 

Спасибо вам большое за это ... это сводит меня с ума!

ответ

0

sqlite3_exec() является (устаревшей) оберткой вокруг sqlite3_prepare*()/sqlite3_step()/sqlite3_finalize(). Вы не можете использовать sqlite3_exec() с параметрами.

У вас все еще есть правильный вызов sqlite3_step() в вашей программе; просто удалите оба звонка sqlite3_exec().

+0

Большое спасибо ... Я попробую ваше предложение в ближайшее время и дам вам знать. – user3079872

Смежные вопросы