2013-11-11 5 views
0

Я новичок в sqlite3 в iOS, я пытаюсь обновить существующую запись в таблице устройств, которая ниже: я не обновляю первичный ключ, хотя я обновляю запись на основе первичной ключ где deviceAppID мой PKНе удалось обновить таблицу базы данных sqlite3 в iOS

Вот код, который я пытаюсь

 const char *updateStatement ="UPDATE Device SET deviceGUID=?,testGUID=?,deviceName=?,device=?,deviceOsVersion=?,platform=?,createdDateTime=?,updatedDateTime=?,status=? WHERE deviceAppID=1"; 

     int success; 

     if(sqlite3_prepare_v2(mDatabase, updateStatement, -1, &mStatement, NULL) == SQLITE_OK) 
      { 
sqlite3_bind_text(mStatement, 2, [device.deviceGUID UTF8String], -1, SQLITE_TRANSIENT); 
sqlite3_bind_text(mStatement, 3, [device.testGUID UTF8String], -1, SQLITE_TRANSIENT); 
sqlite3_bind_text(mStatement, 4, [device.deviceName UTF8String], -1, SQLITE_TRANSIENT); 
sqlite3_bind_text(mStatement, 5, [device.device UTF8String], -1, SQLITE_TRANSIENT); 
sqlite3_bind_text(mStatement, 6, [device.deviceOSVersion UTF8String], -1, SQLITE_TRANSIENT); 
sqlite3_bind_text(mStatement, 7, [device.devicePlatform UTF8String], -1, SQLITE_TRANSIENT); 
sqlite3_bind_text(mStatement, 8, [device.createdDateTime UTF8String], -1, SQLITE_TRANSIENT); 
sqlite3_bind_text(mStatement, 9, [device.updatedDateTime UTF8String], -1, SQLITE_TRANSIENT); 
sqlite3_bind_int(mStatement, 10, device.status); 

      success = sqlite3_step(mStatement); 


      if (success == SQLITE_ERROR) { 

        NSAssert1(0, @"Error: failed to insert into the database with message '%s'.", sqlite3_errmsg(mDatabase)); 
      } 
      } 

     else { 

      NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(mDatabase)); 
     } 
     sqlite3_finalize(mStatement); 
+0

Я не уверен в этом, но почему ваши номера параметров начинаются с 2 и доходят до 10? Разве это не должно быть 0 .. 8? – nabuchodonossor

+0

Таблица должна находиться в папке Documents - вы, вероятно, используете таблицу из набора приложений: http://stackoverflow.com/a/15491281/653513. Файл в комплекте приложений доступен только для чтения. –

+0

Я упоминал как в вопросе себя я не обновляю ПК. поэтому я сбросил столбец 1. –

ответ

2

Пожалуйста, прочтите следующую ссылку (индекс не является индексом в таблице, это индекс в ЗАЯВЛЕНИЯ)

read this - found it with google

+0

Спасибо @nabuchodonossor, не могли бы вы рассказать мне контекст выше кода, где я испортил вещи. –

+0

Да. Если вы перейдете к предоставленной ссылке, вы найдете описание способа использования метода привязки (ПРИМЕЧАНИЕ. Для разных типов данных существуют разные методы привязки (int, date ...). Короче: вы начинаете с индекса 0 для первый параметр, индекс 1 для второго параметра и т. д. Закройте простую. Все остальные комментарии также могут быть важны, например, вам разрешено обновлять таблицу и т. д. – nabuchodonossor

+0

, но почему индекс от 1, в то время как вставка записи может скажите, пожалуйста. –

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