如何使用node js同步读取sqlite3数据库?

Posted

技术标签:

【中文标题】如何使用node js同步读取sqlite3数据库?【英文标题】:How to read a sqlite3 database, using node js, synchronously? 【发布时间】: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 【参考方案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-sqlite3 和 sqlite-sync,允许同步 SQLite 查询。这是一个例子:

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

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

【讨论】:

以上是关于如何使用node js同步读取sqlite3数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 node.js 中使用 sqlite3 执行批量插入?

Node.js 说它不能加载 sqlite3 模块,但无论如何

使用 SQLite3 + Node.js 的最佳实践

使用 node.js 检查数据是不是包含在 SQLite3 数据库中

如何在运行 Node.js 的 Debian 上安装 sqlite3?

node.js同步及异步读取写入删除文件1