问题 SQLite3是否在Node.js中准备好了语句?


在npm文档中,只有可见的预处理语句用于插入。这些准备好的语句是否适用于选择,更新和删除?

我试过选择,没有 .each 函数,回调行。任何人都可以这样做或有资源链接,因为我可以肯定无法找到任何。


5160
2018-03-02 05:58


起源

我在使用mapbox / node-sqlite3进行测试时注意到了同样的事情,当使用SELECT语句时,我没有得到数据,只有INSERT。 DELETE对我来说是一个准备好的声明,但在我的情况下,当我删除时,我的查询不会尝试返回任何内容。 - ABCD.ca


答案:


根据 node-sqlite3 API文档,您可以通过几种不同的方式在SQL查询中使用参数:

// Directly in the function arguments.
db.run("UPDATE tbl SET name = ? WHERE id = ?", "bar", 2);

// As an array.
db.run("UPDATE tbl SET name = ? WHERE id = ?", [ "bar", 2 ]);

// As an object with named parameters.
db.run("UPDATE tbl SET name = $name WHERE id = $id", {
  $id: 2,
  $name: "bar"
});

11
2018-05-09 13:47



Izc询问使用SELECT的预准备语句,这显示了一种解决方法,但没有回答这个问题。 - ABCD.ca


是的,支持准备好的陈述。

节点的sqlite3

var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('data.db');

db.serialize(function() {

  var stmt = db.prepare("INSERT INTO users VALUES (?,?)");
  for (var i = 0; i < 10; i++) {
      stmt.run("user " + i, "email " + i);
  }
  stmt.finalize();

  stmt = db.prepare("SELECT * FROM users WHERE id=?");
  stmt.each(userId, function(err, row) {
      console.log(row.name, row.email);
  }, function(err, count) {
      stmt.finalize();
  });

});

好sqlite3的

var Database = require('better-sqlite3');
var db = new Database('foobar.db', options);

var stmt = db.prepare("INSERT INTO users VALUES (?,?)");
for (var i = 0; i < 10; i++) {
    stmt.run("user " + i, "email " + i);
}

var stmt = db.prepare('SELECT * FROM users WHERE id=?');
var row = stmt.get(userId);
console.log(row.name, row.email);

4
2018-03-16 19:58