问题标签 [node-sqlite3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
484 浏览

node.js - `node-sqlite 每个函数是否将所有查询加载到内存中,或者它使用来自硬盘的流/管道

我想处理 10,000,000 行

这是我的代码:

问题是:它会吃掉我所有的内存,还是会一行一行地从硬盘读取?

0 投票
1 回答
727 浏览

node.js - Nodjs Sqllite3 不刷新到磁盘

我遇到了 sqlite3 无法刷新到磁盘的问题。我正在使用的代码如下。我的总文件列表超过 470k,并且该程序倾向于使用几 GB 的内存。程序运行时 test.db 为 0 字节,不使用日志。它仅在运行时才开始写入磁盘 db.close()

我曾尝试删除db.run("BEGIN;");db.run("COMMIT;");但没有帮助。

漏洞?

我将此报告为 github 上的错误

0 投票
1 回答
1425 浏览

node.js - 如何从事务中获取 last_insert_rowid?

我正在尝试使用 node-sqlite3 从我的 node.js 应用程序在数据库中执行 INSERT + UPDATE 事务。但是,我无法弄清楚事务完成后如何获取 last_insert_rowid。我的查询看起来像这样:

这个字符串(减去额外的空格)被分配给 var q

我在某个时候使用这个打开了我的数据库:

但如果我尝试使用:

它不仅没有错误地打印“0”,而且不会对数据库进行任何更改!!!如果我使用exec而不是run查询成功运行,但我无法从 exec 获取任何数据。

我也尝试过这样的事情:

但是“run”上的“this”上下文没有 lastId 属性!

我还查看了 sqlite3-transaction 包,但它似乎也没有在事务回调中提供任何信息!

我不能将插入作为单独的 run() 运行,获取this.lastId然后使用它来运行更新,因为这将使数据库在两个语句之间处于无效状态(因此需要事务)。

如何从此事务中获取 last_insert_rowid()?

0 投票
1 回答
143 浏览

javascript - 使用 sqlite3 在 node.js 中变量的有效性

我在 node.js 中的 sqlite3 上做了一个 select 语句。我希望在 sqlite 代码块之外定义的变量“数据”中得到结果,但它保持为空。在 sqlite 代码块中,数据变量具有正确的值。有人知道我做错了什么吗?

谢谢你。

0 投票
1 回答
1520 浏览

node.js - sqlite3 db.close() 在 db.serialized() 完成之前调用

我有一个 sqlite3 嵌套查询案例。希望将每个查询结果推送到 json 数组并将其返回。但是对于第二次选择调用,总是得到“错误:SQLITE_MISUSE:数据库句柄已关闭”。似乎 db.close() 在第二个查询之前被调用。

为什么会这样,我认为序列化可以解决这个问题。请问如何解决?

0 投票
2 回答
38 浏览

javascript - 使用正确的数组响应 HTTP 请求时出现问题。使用expressjs从函数内部发送结果的可能方法?

问题摘要:所以我正在开发一个在后端有一个 SQL 数据库的程序,并且我正在使用 npm SQLite3 模块与之交谈。当我向服务器发出 HTTP 请求时,我在另一篇文章中被告知我应该对res.send其中的函数执行操作,因此在函数运行后,它将返回来自函数的任何内容。够容易吧?但后来我遇到了一个异步函数的问题.all (API Doc here)。基本上发生的事情是我调用我的数据库并将里面的所有内容返回到 database.all 中的一个对象,但是 database.all 是一个异步函数,它是无效的并且不能返回任何东西。我有一个在回调中发送对象的回调,但我不知道从那里如何处理它,或者我什至需要一个回调。

所以我的问题是:我可以从我的.all函数或回调中的某个地方发送 HTTP 响应,还是我的函数必须将数组返回到它被调用的位置?下面的代码向您展示我的意思。

事件链(Github repo 供参考)

我已经设置了一个角度控制器来在我的页面加载时发送以下 HTTP 请求:

当服务器(server.js)收到它时,我这样做:

它在另一个名为 test.js 的文件中运行 loadWaitingList() 函数:

这叫updateDB.Manager,又名这个人:

所以最后我们可以看到,在db.all运行之后,我在row. row作为参数传入db.all并作为数组返回,我尝试在外部声明它db.all并将其传入然后打印出结果,但由于db.all是异步的,它总是出现空,因为函数尚未运行。

当我在调用回调后运行回调并检查对象(使用 vscode 调试器)时,returnRow其中包含来自我的数据库的正确数据。

如何发送被放入row并最终returnRow作为响应返回的数据?当我们以不同的方式获取 HTTP 请求然后res.send从回调或其他方式中执行时,是否可以执行初始函数调用?

0 投票
2 回答
2335 浏览

sql-server - nodejs 使用 node-mssql 连接 mssql

我尝试使用 node-mssql( https://github.com/patriksimek/node-mssql/issues ) 来连接 mssql。这是我的配置:

这是我的连接代码

这是我的错误: (intermediate value).query(...).then 不是函数。

我不知道为什么会这样!!

有人帮助我!

0 投票
0 回答
68 浏览

node.js - Node.js、Express.js 和 sqllite3.js

我对 Node.js 中的对象属性有疑问。虽然在测试对象中按预期设置了属性,但对我的文章对象也不起作用。我看到的区别是文章的函数是异步调用的。我必须承认我有点失落......

这是app.js,它实例化了测试对象和文章对象。

这是我相当简单的 test.js :

这是我相当简单的 article.js :

0 投票
0 回答
387 浏览

node.js - 如何要求具有 sqlcipher 支持的 node-sqlite3

我有一个需要node-sqlite3包的包。但是,它还需要使用 sqlcipher 支持构建 node-sqlite3,否则我的包将无法正常运行

我正在使用以下方法安装 node-sqlite3:

但是,当我完成并查看我的 package.json 时,它只是说:

没有提及 sqlcipher 要求。如果我天真地尝试使用此要求安装我的包,它不会使用 sqlcipher 支持构建,并且我的应用程序会失败,因为它无法读取 sqlcipher 加密数据库,即使存在正确的密钥!

此外,在不同的平台上,不能保证 sqlcipher 会安装在同一位置,尽管为了使问题更简单,我们可以假设它已经构建并存在于某个地方

如何正确指定此依赖项要求?

0 投票
2 回答
24970 浏览

node.js - `db.serialize` 在 `node-sqlite3` 中如何工作

最近在学习使用 node 和node-sqlite3来操作 sqlite3,这里有一个示例。

文档说这db.serialized是用来确保 SQL 行按顺序执行的,但我很困惑,为什么不按顺序执行db.serialize,毕竟它们会从事件队列中拉出并按顺序执行?它是如何在这里工作的?

而如果只有一个sql要执行,不db.serialize按如下方式运行是否安全?