Insertion en vrac pour cordovaSQLite

Existe-t-il un insert en vrac pour cordovaSQLite? J'ai beaucoup de données, que je veux enregistrer dans un Db sqlite. Mon code est maintenant

var query = "INSERT INTO Card (CardId, CardSetId, FrontText, BackText, ControlType, CardLevel, IsDirty, ChangedAt, Active) VALUES (?,?,?,?,?,?,?,?,?)"; for (var i = 0; i < cardList.length; i++) {$cordovaSQLite.execute(db, query, [cardList[i].CardId, cardList[i].CardSetId, cardList[i].FrontText, cardList[i].BackText, cardList[i].ControlType, cardList[i].CardLevel, cardList[i].IsDirty, cardList[i].ChangedAt, cardList[i].Active]); }

Cela fonctionne mais c'est très très lent!

Lorsque j'utilise ce code: var query = "INSERT INTO Card (CardId, CardSetId, FrontText, BackText, ControlType, CardLevel, IsDirty, ChangedAt, Active) VALUES ";

  var data = []; var rowArgs = []; cardList.forEach(function (card) { rowArgs.push("(?,?,?,?,?,?,?,?,?)"); data.push(card.CardId); data.push(card.CardSetId); console.log(card.CardSetId); data.push(card.FrontText); data.push(card.BackText); data.push(card.ControlType); data.push(card.CardLevel); data.push(card.IsDirty); data.push(card.ChangedAt); data.push(card.Active); }); query += rowArgs.join(", "); $cordovaSQLite.execute(db, query, [data]).then(function (res) { console.log("inserted"); }, function(err) { console.dir(err); }); 

Ensuite, je reçois l'erreur suivante: échec sqlite3_step: la contrainte NON NON échouée: Card.CardSetId

Mais dans le tableau de données CardSetId n'est pas vide!

Existe-t-il un moyen de le rendre plus rapide, ou le faire avec un insert en vrac?

Merci

Vous pouvez essayer d'utiliser cordova-sqlite-porter . Passez vos inserts en tant que structure JSON à l'aide d' importJsonToDb () et optimisera l'insertion dans le DB SQLite.

L' exemple de projet illustre l'insertion de plus de 15 000 enregistrements. Sur un Samsung Galaxy S4, l'exécution de ces instructions à l'aide d'un seul SQL insère environ 5 minutes / 300 secondes, mais l'équivalent JSON optimisé (en utilisant UNION SELECT – voir ici pour info ) prend environ 3 secondes sur le même périphérique – 100 fois plus rapide.