【问题标题】:How to read a sqlite3 database, using node js, synchronously?如何使用node js同步读取sqlite3数据库?
【发布时间】:2013-03-12 15:19:29
【问题描述】:
exports.allProbes = function() {
    var rows = db.all("SELECT * FROM probes;");
    return rows;
};

main:
var json_values = allProbes();

有可能做这样的事情吗? 我的意思是,不使用回调函数:只是从数据库中读取数据(同步模式)。并返回一个 json 格式的输出?

谢谢。

【问题讨论】:

  • 你用的是什么模块?这完全取决于它是否具有同步支持。
  • 我已经使用以下命令安装了 sqlite3:“npm install sqlite3”
  • 我需要和你一样的 OP。我需要保证我的查询按顺序执行。将它包装在 Promise 中是一个 PITAS

标签: json node.js sqlite


【解决方案1】:

使用 sqlite3 将无法做到这一点。使用 sqlite3 模块,唯一可用的操作模式是异步执行,您将不得不使用回调。例如。

exports.allProbes = function(callback) {
    db.all("SELECT * FROM probes;", function(err, all) {
        callback(err, all);  
    });
};

然后在你的代码中:

var json_values;

allProbes(function(err, all) {
    json_values = all;
});

检查sqlite3 API Docs

【讨论】:

  • 或者只是..db.all("SELECT * FROM probes;", callback),
  • 我们不能使用promise吗?
【解决方案2】:

你必须使用 npm install --save sql.js 安装 sql.js

按照以下步骤休息:

var fs = require('fs');    
var sql = require('sql.js');    
var bfr = fs.readFileSync('/tmp/db.sqlite');

var db = new sql.Database(bfr);
db.each('SELECT * FROM test', function (row) {

  console.log(row);

});

更多详情您可以通过以下链接获取:https://discuss.atom.io/t/how-to-access-a-local-db-on-windows-through-electron/22400/13

【讨论】:

  • 这不能回答问题。 文件是同步读取的,但是数据库查询还是需要异步回调。
【解决方案3】:

有一些 npm 包,例如 better-sqlite3sqlite-sync,允许同步 SQLite 查询。这是一个例子:

var sqlite = require("better-sqlite3");
var db = new sqlite("example.db");

var rows = db.prepare("SELECT * FROM probes").all();
console.log(rows);

【讨论】:

    猜你喜欢
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2022-06-14
    • 2016-06-30
    • 2017-02-03
    • 1970-01-01
    相关资源
    最近更新 更多