我正在尝试使用sqlite.jsm而不是mozStorage。下面是我的原始代码(file.sqlite已经打开了):
var sql = "UPDATE row SET color=?1 WHERE id=?2";
var statement = connection.createAsyncStatement(sql);
statement.bindInt32Parameter(0, row.color);
statement.bindInt32Parameter(2, row.id);
statement.executeAsync();新代码:
Components.utils.import("resource://gre/modules/Sqlite.jsm");
Components.utils.import("resource://gre/modules/Task.jsm");
Task.spawn(function() {
var db;
try {
// Open a database
db = yield Sqlite.openConnection({ path: "file.sqlite" });
var sql = "UPDATE row SET color=?1 WHERE id=?2";
var dataToInsert = [
["color", row.color],
["id", row.id],
for (var data of dataToInsert) {
yield db.execute(sql, data);
}
} catch (ex) {
// **Here i get : Error(s) encountered during statement execution.**
} finally {
if (db) {
yield db.close();
}
}
});那么,如何使用sqlite.jsm在更新查询中传递参数呢?提前感谢
发布于 2015-03-31 00:53:12
对于提出问题的人来说,现在可能已经晚了,但仍然可能有用。
Sqlite.jsm鼓励使用带有命名参数和对象的查询作为参数存储,因此正确的代码应如下所示:
Components.utils.import("resource://gre/modules/Sqlite.jsm");
Components.utils.import("resource://gre/modules/Task.jsm");
return Task.spawn(function*() {
var db;
try {
// Open a database
db = yield Sqlite.openConnection({path: "file.sqlite"});
var sql = "UPDATE row SET color = :color WHERE id = :id";
var params = {
'color': row.color,
'id': row.id
};
return db.execute(sql, params);
} catch (ex) {
// Exception handling
} finally {
if (db) {
yield db.close();
}
}
});https://stackoverflow.com/questions/25139322
复制相似问题