Вставка FMDB с автоинкрементом

Я пытаюсь понять это некоторое время, но я не могу найти решение. У меня есть таблица, которая была создана как:

 [db executeUpdate:@"CREATE TABLE 'MEDIA' (identifier INTEGER PRIMARY KEY AUTOINCREMENT, taskIdentifier INTEGER, type INTEGER, data BLOB)"]

Как я должен вставить запись в эту таблицу? Я пробовал это:

 [db executeUpdate:@"INSERT INTO 'MEDIA' VALUES($next_id,?,?,?)" withArgumentsInArray:arguments];

тогда как arguments - это NSArray с 4 значениями, первое из которых является фиктивным значением (поскольку оно должно автоматически увеличиваться), но безрезультатно. Как это должно работать с FMDB?


person Fuggly    schedule 29.05.2012    source источник


Ответы (1)


Вы должны спросить себя, действительно ли вы хотите иметь ключевое слово AUTOINCREMENT. AUTOINCREMENT вместе с INTEGER PRIMARY KEY обеспечивает очень специфическое поведение, которое описано здесь. Очень вероятно, что он вам не нужен, и в этом случае просто оставьте INTEGER PRIMARY KEY в определении столбца. Теперь столбцы, определенные как INTEGER PRIMARY KEY, действительно становятся псевдонимом ROWID, поэтому у вас есть 2 варианта:

  • опустите значение для этого столбца в операторе INSERT. Это автоматически вставит туда следующее доступное значение. Из документов: The usual algorithm is to give the newly created row a ROWID that is one larger than the largest ROWID in the table prior to the insert. Итак, ваш INSERT будет выглядеть так:[db executeUpdate:@"INSERT INTO 'MEDIA' VALUES(?,?,?)" withArgumentsInArray:arguments]; но массив аргументов будет содержать только 3 значения для taskIdentifier, type и data.

  • укажите значение для столбца идентификатор следующим образом: [db executeUpdate:@"INSERT INTO 'MEDIA' VALUES(?,?,?,?)" withArgumentsInArray:arguments]; с массивом аргументов, содержащим идентификатор как NSNumber по индексу 0.

person lawicko    schedule 30.05.2012