2009-05-29 3 views
0

Вот мой стол,Почему SQLite не увеличивает мой первичный ключ?

sqlStmt = [ [ NSString stringWithFormat:@"Create Table %@ (recordNo INTEGER PRIMARY KEY AUTOINCREMENT, noOfPlayer INTEGER, smallBlindAmt INTEGER, bigBlindAmt INTEGER , startingChips INTEGER, roundTimer INTEGER) " , SETTINGS_TABLE ] StringUsingEncoding:NSUTF8StringEncoding ] ; 

вставки запроса

sqlStmt = [ [ NSString stringWithFormat: @"insert into %@ values (NULL,%d, %d ,%d ,%d ,%d)" , strTableName ,noOfPlayers, SmallAmt, BigAmt, StartingChips, RoundTime ] UTF8String ] ; 

получить идентификатор записи последней записи, в

lastRecordNo = sqlite3_last_insert_rowid(dbObj); 

lastRecordNo всегда 0, и я не могу вставлять другие значения потому что он дает первичный ключ ошибки, должен быть уникальным.

Мне не удается устранить проблему, связанная с этим?

Как получить последний идентификатор записи, являющийся первичным ключом и автоинкремент.?

Есть ли проблемы в моем запросе на вставку?

Может ли кто-нибудь объяснить мне пример создания, вставки и выбора запросов, где основной является автоинкремент?

+0

Странно ... Я тоже хотел бы знать ... – Fortega

ответ

0

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

+0

Кроме того, я считаю, что sqlite3_last_insert_rowid предоставит вам последний идентификатор строки, вставленный для любой таблицы, поэтому, если в базе данных имеется несколько таблиц (как часто случается) это может действительно повредить вам. Я знаю, что перестала использовать его по таким причинам. –

2

Не указывайте первичный ключ в инструкции insert, чтобы система назначила его с помощью автоматического увеличения.

Изменение вставки заявление:

insert into %@ (noOfPlayer, smallBlindAmt, bigBlindAmt, startingChips, roundTimer) values (%d, %d ,%d ,%d ,%d) 
+0

Вставка NULL для первичного ключа должна быть эквивалентной, а также приводить к автоматическому приращению. Я согласен, что ваш синтаксис немного лучше. –

+0

Правильно, поэтому мое предложение должно быть эквивалентно исходному sql. – dmercredi

1

проверить таблицу для записей. вы можете использовать sqlite3_mprintf. here для получения более подробной информации

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