Hit*_*sal 2 javascript sqlite node.js angularjs ionic-framework
我试图使用离子框架在SQLite中插入多行.单排插入工作正常.
即使我跑了
INSERT INTO categories (category_id, category_name,category_type) VALUES (1,"test",1),(2,"test again", 2);
Run Code Online (Sandbox Code Playgroud)
这也很好.但是当我尝试创建一个动态字符串时,它给出了错误"无法准备语句(1接近"?":语法错误)".
.success((function (result) {
var query = "INSERT INTO categories (category_id, category_name,category_type) VALUES ?";
var data = [];
result.forEach(function (category) {
data.push([category.id, category.category_name, category.category_type]);
});
$cordovaSQLite.execute(db, query,[data]).then(function (res) {
console.log("inserted");
}, function (err) {
console.dir(err);
});
Run Code Online (Sandbox Code Playgroud)
Goo*_*gie 15
向插入添加多个参数,就像在测试查询中一样(您提到的第一个),然后将所有参数作为一维数组传递:
.success((function (result) {
var query = "INSERT INTO categories (category_id, category_name,category_type) VALUES ";
var data = [];
var rowArgs = [];
result.forEach(function (category) {
rowArgs.push("(?, ?, ?)");
data.push(category.id);
data.push(category.category_name);
data.push(category.category_type);
});
query += rowArgs.join(", ");
$cordovaSQLite.execute(db, query,[data]).then(function (res) {
console.log("inserted");
}, function (err) {
console.dir(err);
});
Run Code Online (Sandbox Code Playgroud)
此代码将生成如下查询:
INSERT INTO categories (category_id, category_name,category_type) VALUES (?, ?, ?), (?, ?, ?), (?, ?, ?), (?, ?, ?);
Run Code Online (Sandbox Code Playgroud)
并且您的数据数组大小为12,其中数组中的每3个条目将是要插入的一行数据.
这些数字只是示例,它们取决于数量result
.
这似乎是一种方法:
var query = "INSERT INTO categories (category_id,category_name,category_type) VALUES (?,?,?)";
Run Code Online (Sandbox Code Playgroud)
...
.success((function (result) {
$cordovaSQLite.transaction(function(tx){
result.forEach(function (category) {
tx.executeSql(query, [category.id, category.category_name, category.category_type]);
});
}).success(function(){
.....
});
Run Code Online (Sandbox Code Playgroud)
我也见过这种方法:
$cordovaSQLite.execute("BEGIN IMMEDIATE TRANSACTION");
result.forEach(function (category) {
$cordovaSQLite.executeSql(query, [category.id, category.category_name, category.category_type]);
});
$cordovaSQLite.execute("COMMIT TRANSACTION");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6951 次 |
最近记录: |