【发布时间】:2016-05-23 17:51:58
【问题描述】:
是否有用于 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 failure: NOT NULL constraint failed: Card.CardSetId
但是数据数组中的 CardSetId 不为空!
有没有办法让它更快,或者通过批量插入来做到这一点?
谢谢
【问题讨论】:
-
我在表中添加了一些索引,它使它更快一点,但还不够……有什么想法吗?
标签: javascript jquery angularjs sqlite cordova