2009-05-29 5 views
0

Voici ma table,Pourquoi SQLite n'incrémente-t-il pas ma clé primaire?

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

requête d'insertion,

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

obtenir la dernière id record de disque,

lastRecordNo = sqlite3_last_insert_rowid(dbObj); 

Le lastRecordNo est toujours 0, et je ne peux pas insérer une autre valeur parce qu'il donne l'erreur clé primaire doit être unique.

Je n'arrive pas à obtenir le problème associé? Comment extraire le dernier identifiant d'enregistrement qui est la clé primaire et l'auto-incrémentation.?

Y a-t-il un problème dans ma requête d'insertion?

Quelqu'un peut-il m'expliquer avec exemple créer, insérer et sélectionner des requêtes où primaire est un auto-incrément?

+0

Etrange ... Je voudrais savoir aussi ... – Fortega

Répondre

0

Je ne sais pas vraiment pourquoi cela ne fonctionne pas, vous pouvez vous reconnecter ou quelque chose. Je suggère également de ne pas chercher l'identifiant de la dernière rangée car un autre processus peut l'augmenter en parallèle.

+0

Aussi, je crois que sqlite3_last_insert_rowid vous donnera le dernier identifiant de ligne inséré pour n'importe quelle table, donc si vous avez plusieurs tables dans une base de données (aussi souvent que ça arrive) ça peut vraiment vous embêter. Je sais que j'ai arrêté de l'utiliser pour des raisons comme celle-ci. –

2

Ne définissez pas explicitement la clé primaire dans votre instruction d'insertion, laissez le système l'affecter en utilisant l'incrémentation automatique.

Modifier la déclaration d'insertion à:

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

L'insertion de NULL pour la clé primaire doit être équivalente et provoquer également une incrémentation automatique. Je suis d'accord que votre syntaxe est un peu mieux, cependant. –

+0

C'est vrai, donc ma suggestion devrait être équivalente à l'original sql. – dmercredi

1

vérifier votre table pour les enregistrements. vous pouvez utiliser sqlite3_mprintf. here pour plus de détails

Questions connexes