问题标签 [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.
electron - 无法在电子渲染器进程中使用 sqlite:“无法读取未定义的属性 '_handle'”
我正在尝试在电子应用程序中使用node-sqlite3,但在应用程序窗口中,我在 chrome 控制台中收到以下错误:
错误发生在第3行file:///[...]/assets/js/node_modules/sqlite3/node_modules/set-blocking/index.js
(这个文件是自动生成删除的,不是我写的):
这仅在渲染器进程内部使用时才会发生const sqlite3 = require('sqlite3')
(例如在 React 组件中)。require('sqlite3')
在主电子过程中使用时没有任何问题(数据库调用有效)。
此示例应用程序显示可以在渲染器进程中使用 sqlite 模块。我不明白为什么它在我的情况下不起作用。
我的package.json
:
我使用:节点 7.9.0,铬 58.0.3029.110,电子 1.7.10。
我在这里在 github 上创建了一个问题。
node.js - Sqlite 绑定或列索引超出范围,但我的参数数量正确
我的代码是这样的:
我收到以下错误:
如果我正确理解了文档,我的声明中就有适量的参数和占位符。那么我做错了什么?谢谢。
node.js - 在不重新启动应用程序的情况下更新 SQLite 数据库
我有一个NodeJS应用程序,它在生产服务器上运行,永远.
该应用程序使用第三方SQLite数据库,该数据库每天早上使用由 cron 触发的脚本进行更新,cron 将数据库从外部 FTP 下载到服务器。
我花了一些时间才意识到每次文件被回收时我都需要重新启动服务器,否则我的应用程序使用的数据没有变化(我猜它在启动时缓存在内存中)。
如何在不重新启动应用程序的情况下刷新数据库?
javascript - 将结果传递出 NodeJS 数据库函数以在其外部使用
我有以下代码与 SQLite3 npm 模块一起使用。
我想从rows
这段代码之外访问数据,例如......
有人可以用一个简单的例子来解释这是如何完成的吗?
node.js - Bind blob parameter in node-sqlite3
I have an SQLite3 table with BLOB primary key (id
):
In javascript models, the primary key (id
) is represented as a Javascript string (one HEX byte per character):
When I run the query below, the id
parameter gets bound as a string. But I need it to be bound as a BLOB.
To illustrate, the above code generates the following SQL:
What I need is this:
sql - SQLITE_RANGE:INSERT 语句的绑定或列超出范围
我想使用该方法将行插入到 SQLite3 表中knex.raw
。不幸的是,我收到“SQLITE_RANGE”错误,这使我的测试失败。我已经通过以下方式验证了传递给原始查询的绑定:
- 他们尊重 INSERT 语句的顺序
- 他们尊重指定的列类型
- 他们尊重原始查询中请求的绑定数量
除此之外,我在网上查看过,但找不到解决我问题的方法。以下是尝试的操作的详细信息:
- 引擎:sqlite3 ^3.1.13
- SQL 客户端:knex ^0.14.4
- 环境:电子^1.7.11
错误:
表定义:
*注意这里定义的列类型是亲和类型,即MySQL类型。这些在 SQLite3 中有效,并且由引擎转换和优化为它们在 SQLite3 中的等效项。
询问:
绑定:
调用代码:
解决为:
你能帮我解决这个问题吗?
干杯
javascript - 如何获取和使用驻留在同步函数中的异步函数的结果?
我将尝试尽可能简要地解释这一点,但问题很长(我知道)。我必须向您展示代码的结构,以便您了解为什么我需要做我绝望的尝试!
我正在开发一个使用 SQLite 作为其数据库的 Electron/AngularJS 项目。我已经安装了“node-sqlite3”npm 包,问题在于我使用了这个包的 API 之一。
有一个登录页面需要做简单的登录工作,例如检查用户提供的用户名和密码,以及存储在数据库中的用户名和密码。
为了测试,我只是检查用户名输入并在对象中返回该用户的“用户名”和“密码”;真的很简单……至少我是这么想的。
该过程包括 2 个 Angularjs 服务、一个“Login.controller”和登录页面的视图。
每一个的代码如下所示:
登录.view.html:
vm.username
是用户输入的用户名字段。
vm.login()
是 Login.controller 中的一个函数。
登录.controller.js:
我还在这个项目中使用了“requirejs”,所以我省略了关于依赖注入和“定义”的行。控制器工作正常。
authService
是负责进一步身份验证的服务,但目前没有太多内容。
dbService
是连接到 SQLite 数据库并(希望稍后)执行查询并将结果返回给需要它们的其他服务/控制器的服务。
如代码所示,login()
function 接受一个username
参数并将数据传递给authUser
function in authService
。
authService.js:
如您所见,此服务还连接到dbService
.
authUser()
login()
与控制器中的函数执行相同的操作;接受用户名并将其传递给findUser()
在dbService
. 正如我之前所说,这些只是小步骤,所以请原谅文件和服务的冗余,它们旨在稍后填充有意义的代码。
dbService.js:
数据库连接和其他不相关的行已被删除。这是我被困在的实际坑。
查询结果只有一行是一个对象,这就是我所追求的人。
我result
在顶部定义了一个对象,这是我想从findUser()
函数返回的主要内容。
因此,查询的结果应该被注入到result
对象中。如果发生这种情况,我可以轻松地使用findUser()
之前服务 ( authService
) 中的返回值并在我的代码中继续前进。
目前,该行return result
自然不返回任何内容,一个空对象。node-sqlite .get()
(这里) 函数是一个异步函数。因此,return result
早于 执行result = row;
。最终我只想填充result
对象。
我不得不提到我已经尝试过 Promises,以及这里和这里async/await
提到的另一个解决方案。他们都没有帮助。很可能是我没有正确理解这些解决方案并错误地实施它们,但无论哪种方式,我都被这个看似简单的问题困扰了几个小时。任何帮助都非常感谢。
普里亚
** *编辑:
如果有人卡在异步调用中并一路过来,我有解决方案:dbService.js
应该更改最后一个文件 ( ) 以返回一个 Promise。此示例可能会帮助您解决问题:
在你的接收端(需要这个 Promise 的结果的函数),你可以做这样的事情:
sqlite - 当名称不包含特殊字符时,为什么在 node-sqlite3 中使用反引号?
我正在为 codeacademy pro 密集型项目做顶点(不可审查)项目。
课程中提供了一个示例。
我了解 es6 的反引号概念,并且 sqlite3 中的反引号用于替代字符,例如空格。但是在这个例子中,我不明白为什么反引号是必要的,例如。Artist
, name
, 等等?
能否请您帮忙,我还在学习中。
node.js - Node.js 使用“sqlite”查询 sqlite
我正在尝试掌握Node(我主要使用python),所以我正在开发一个小项目来读取写入数据到sqlite数据库。
幸运的是,我在写入数据库时没有问题,但我似乎根本无法让查询工作。我已经在 sql 终端中测试了查询,它们是成功的。
到目前为止,我有类似的东西
nw.js - 如何构建和运行 byteball 桌面应用程序?
我知道我们应该在桌面上运行带有 nw.js 框架的 byteball 应用程序。所以我确实喜欢下面。1. git 克隆 2. bower 安装 3. npm 安装 4. grunt
在这些之后,我nwjs .
在 MacOS 上启动了该应用程序。此刻,它说:
对于这些错误,在 byteball 存储库中有解决方案,例如https://github.com/byteball/byteball
所以我找到了node-v47-darwin-x64
目录,但我没有找到它。现在,我可以启动 byteball 桌面应用程序,但无法进入主屏幕,因为当我单击continue
按钮时它会停止并且无法调试。如何在桌面上运行此应用程序?