Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript cordovaSQLite的批量插入_Javascript_Jquery_Angularjs_Sqlite_Cordova - Fatal编程技术网

Javascript cordovaSQLite的批量插入

Javascript cordovaSQLite的批量插入,javascript,jquery,angularjs,sqlite,cordova,Javascript,Jquery,Angularjs,Sqlite,Cordova,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是否有批量插入? 我有很多数据,我想保存在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]);
}
然后我得到以下错误:sqlite3\u步骤失败:notnull约束失败:Card.CardSetId

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

有没有办法让它更快,或者通过批量插入来实现

谢谢

您可以尝试使用。使用将插入内容作为JSON结构传递给SQLite数据库

图中显示了15000多条记录的插入。在三星Galaxy S4上,使用单个SQL insert语句执行此操作大约需要5分钟/300秒,但在同一台设备上使用经过优化的JSON等效语句(使用UNION SELECT-)大约需要3秒-速度快100倍。

您可以尝试使用。使用将插入内容作为JSON结构传递给SQLite数据库


图中显示了15000多条记录的插入。在三星Galaxy S4上,使用单个SQL insert语句执行此操作大约需要5分钟/300秒,但在同一台设备上使用优化的JSON等效语句(使用UNION SELECT-)大约需要3秒-快100倍。

我在表中添加了一些索引,这使它稍微快了一点,但还不够。。。有什么想法吗?我在表中添加了一些索引,这使它更快了一点,但还不够。。。有什么想法吗?谢谢你的回答,那太好了,因为我得到的数据都是JSON格式的…我必须使用带有importSqlToDb()的sqlite porter。但现在我遇到了单配额或字符串中反斜杠的问题。有解决办法吗?因为我必须这样编写sql查询:“插入艺术家(Id,Title)值('1','Fred's ball\shoe');”;并且不能使用参数…@user1861065插件能阻止SQL注入吗?我在示例中看不到任何内容被转义…感谢您的回答,这将是非常好的,因为我以JSON格式获取数据…我必须使用带有importSqlToDb()的sqlite porter。但现在我遇到了单配额或字符串中反斜杠的问题。有解决办法吗?因为我必须这样编写sql查询:“插入艺术家(Id,Title)值('1','Fred's ball\shoe');”;并且不能使用参数…@user1861065插件能阻止SQL注入吗?我在示例中看不到有东西逃走了。。。
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);
});