- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
cordovaSQLite 是否有批量插入功能?我有很多数据,我想将其保存在 sqlite 数据库中。
我现在的代码是
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 结构传递给它它将 optimise the insertion进入 SQLite 数据库。
example project说明了 15,000 多条记录的插入。在 Samsung Galaxy S4 上,使用单个 SQL 插入语句执行此操作大约需要 5 分钟/300 秒,但优化的 JSON 等效项(使用 UNION SELECT - see here for info )在同一设备上大约需要 3 秒 - 快了 100 倍。
关于javascript - cordovaSQLite 的批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35365002/
cordovaSQLite 是否有批量插入功能?我有很多数据,我想将其保存在 sqlite 数据库中。 我现在的代码是 var query = "INSERT INTO Card (CardId, C
在我的代码中 $cordovaSQLite.execute 函数在 .run 函数中运行良好,但在我的 Controller 中出现错误。我不知道我做错了什么,我已经包含了所有必需的插件并按照这个非常
尝试遵循使用 SQL lite 的示例,但遇到了困难。 示例说,将 ngCordova 包含在 app.js 中: angular.module('starter', ['ionic', 'start
目前我使用 Angularjs 框架开发 cordova 应用程序。我想获得值(value)返回 $cordovaSQLite.execute() 函数。通常我使用 .then(result()) 获
我目前正尝试在我的应用程序中实现 ngCordova SQLite 插件,但尚未生成有效的解决方案。我关注了Nic Raboy's blog post关于如何将 SQLite 插件与 Ionic 项目
这是我确定导致问题的代码部分: angular.module('starter.controllers', []).controller('StudentsCtrl', function ($scop
我是一名优秀的程序员,十分优秀!