web-dev-qa-db-ja.com

SQLite3はNode.jsにステートメントを用意していますか?

Npm docsから、表示可能な準備済みステートメントのみが挿入用です。これらの準備されたステートメントは、選択、更新、および削除に対して機能しますか?

選択を試みましたが、行がコールバックされる.each関数はありません。誰でもこれを行うことができたか、リソースへのリンクを持っているので、私は地獄が何も見つけることができないと確信できます。

15
lzc

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"
});
15
c.hill

はい、プリペアドステートメントはサポートされています。

node-sqlite の場合:

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();
  });

});

better-sqlite の場合:

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);
8
Bernardo Ramos