SQLite. Impossible d'append plus de 1 000 lignes

J'essaye d'append à ma database de SQLite (avec fmdb) 10k rangs mais l'écriture est arrêtée sur la rangée 1000. Et je n'ai aucune erreur ou avertissement. Mon code:

NSSsortingng *querySsortingng = [NSSsortingng ssortingngWithFormat:@"insert into histories (storyid, text, date, storyurl) values (%li, ?, ?, ?)",history.storyIndex]; if ([self.db open]) { if([self.db executeUpdate:querySsortingng, history.storyText, history.storyDate, history.storyUrl]) { NSLog(@"history added"); } } 

Aucune suggestion?

Pouvez-vous essayer le code suivant et voir s'il y a des changements:

 NSSsortingng *querySsortingng = @"INSERT INTO histories (storyid, text, date, storyurl) VALUES ( ?, ?, ?, ?)"; BOOL executeUpdateStatus = NO; if ([self.db open]) { executeUpdateStatus = [self.db executeUpdate:querySsortingng, [NSNumber numberWithLong:history.storyIndex], history.storyText, history.storyDate, history.storyUrl]; if(executeUpdateStatus == YES) NSLog(@"history added"); else NSLog(@"history NOT added"); } 

Pour tous ceux qui ont le même problème … assurez-vous que votre visionneuse sqlite ne limite pas la sortie de votre requête à 1000 résultats.

Juste perdu quelques minutes avec le même problème et la réponse était aussi simple!

Mettez la database ouverte en dehors de la boucle, afin qu'elle soit appelée juste une fois. L'appeler à plusieurs resockets dans la boucle de 10 000 lignes peut causer des problèmes de memory.

Vérifiez lastErrorCode sur l'object db après chaque executeUpdate et NSLog the lastErrorMessage s'il est différent de zéro.

Commit à intervalles en incrémentant un countur et en utilisant l'arithmétique du module, par ex.

 counter++; if (mod(counter,500) ){ [self.db commit]; } 

Envisagez d'utiliser python pour charger en bloc la database en dehors du projet iOS.

Il semble que vous ayez besoin de valider vos transactions. Il semble que vous ayez atteint une limite sur la quantité de lignes dans une seule transaction.