【问题标题】:Bulk Insert for cordovaSQLite用于cordovaSQLite的批量插入
【发布时间】: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


【解决方案1】:

您可以尝试使用cordova-sqlite-porter。使用 importJsonToDb() 将您的插入作为 JSON 结构传递给它,它会 optimise the insertion 进入 SQLite DB。

example project 说明插入了 15,000 多条记录。在三星 Galaxy S4 上,使用单个 SQL 插入语句执行此操作大约需要 5 分钟/300 秒,但优化的 JSON 等效项(使用 UNION SELECT - see here for info)在同一设备上大约需要 3 秒 - 快 100 倍。

【讨论】:

  • 感谢您的回答,那太好了,因为我还是以 JSON 格式获取数据...
  • 我必须将 sqlite-porter 与 importSqlToDb() 一起使用。但是现在我遇到了单个配额或字符串中的反斜杠的问题。有解决方案吗?因为我必须像这样编写 sql 查询:“INSERT INTO Artist(Id,Title) VALUES ('1','Fred's ball \ shoe');”;并且不能使用参数...
  • @user1861065 插件可以防止SQL注入吗?在示例中我看不到东西被逃脱...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2018-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多