用于cordovaSQLite的批量插入

是否有cordovaSQLite的批量插入? 我有很多数据,我想保存在sqlite Db中。

我的代码现在是

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]); } 

它工作但很慢!

当我使用这段代码时:

 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); }); 

然后我收到以下错误:sqlite3_step失败:NOT NULL约束失败:Card.CardSetId

但是在数据数组中CardSetId不是空的!

有没有办法让它更快,或使用批量插入?

谢谢

您可以尝试使用cordova-sqlite-porter 。 使用importJsonToDb()将您的插入作为JSON结构传递给它,它将优化插入到SQLite DB中。

示例项目说明了插入15,000多条记录。 在三星Galaxy S4上,使用单个SQL插入语句执行此操作大约需要5分钟/ 300秒,但优化的JSON等效(使用UNION SELECT – 请参阅此处获取信息 )在同一设备上大约需要3秒 – 速度提高100倍。