标签: node-sqlite3

Sqlite Electron:错误:SQLITE_CANTOPEN:无法打开数据库文件

我正在尝试在我的 Angular + Electron 应用程序中使用 node-sqlite3 打开 sqlite 数据库文件。

尽管我确保该文件存在并且 Electron 可以读取它,但当我尝试使用以下命令创建 sqlite 数据库时:

import * as sqlite from 'sqlite3';

// ...

const path = `${__dirname}/assets/sqlite.db`;

const fs = require('electron').remote.require('fs');
console.log(path);
if (fs.existsSync(AppConfig.sqlitePath)) {
  console.log('the file exists');
} else {
  console.log('the file does not not');
}

const myDb = new sqlite.Database(path, sqlite.OPEN_READONLY, (error) => {
  console.log(error);
});

Run Code Online (Sandbox Code Playgroud)

该文件存在,因为我收到了正确的console.log消息,它看起来像:

/tmp/.mount_xxxxxx/resources/app.asar.unpacked/dist/assets/sqlite.db
Run Code Online (Sandbox Code Playgroud)

但是,new sqlite.Database(...)我收到以下错误,因为该文件不存在:

错误:SQLITE_CANTOPEN:无法打开数据库文件

sqlite node.js electron node-sqlite3 angular

4
推荐指数
1
解决办法
2万
查看次数

何时用node-sqlite3关闭数据库并表达?

我的问题是弄清楚何时关闭从expressjs后端到sqlite数据库的数据库连接.

我基本上想要实现的是一个数据库连接,它在整个服务器正常运行期间打开,并在服务器关闭时关闭.

var express = require('express')
var app = express()
var sqlite3 = require('sqlite3').verbose();

var db = new sqlite3.Database(data/Test.db);

//use db as needed 

var server = app.listen(8081, function () {
    var host = server.address().address
    var port = server.address().port
    console.log("Example app listening at http://%s:%s", host, port)
});

//on shutdown db.close();
Run Code Online (Sandbox Code Playgroud)

我看了看这些威胁:

堆栈溢出:process.on('exit',callback)

Github问题:App没有app.close()

但是如果我用快速服务器杀了我,建议的解决方案对我不起作用ctrl+c.

那么关于如何在服务器关闭时处理开放数据库连接的"最佳实践"是什么?

sqlite node.js express node-sqlite3

2
推荐指数
1
解决办法
3390
查看次数

如何使用node-sqlite3选择/获取所有行?

我试图从我之前输入的sqlite3数据库中获取所有/多行数据,并确保它(数据)存在.使用db数据库对象,我的尝试看起来像这样:

 db.get
    (
        'SELECT * FROM my_table',
        (err, rows) =>
        {
            if(rows && err === null)
            {
                console.log(rows);
            }
            else
            {
                console.log('Error', err);
            }
        }
    )
Run Code Online (Sandbox Code Playgroud)

以上始终返回包含1行数据的单个对象.

javascript node.js node-sqlite3

1
推荐指数
1
解决办法
4073
查看次数

sqlite3不支持.returning(),不会有任何效果

最近,我注意到控制台中出现黄色警告:

sqlite3不支持.returning(),因此不会有任何效果。

我正在使用该sqlite3模块knex.js。它对输出没有任何影响,但知道它的价值非常重要。这是我的环境详细信息。

knex v0.19.1
sqlite3 v4.0.9
Node v10.16.9
electro-builder v21.2.0
electro v6.0.2

node.js knex.js electron electron-builder node-sqlite3

1
推荐指数
1
解决办法
5911
查看次数

无法在 Node.js 中等待 sqlite3.Database.get() 函数完成

我正在使用 node-sqlite3 在 node.js 中解决一些基本的异步/等待问题。
我的目标是从 SQLite DB 中选择一些值,检查它的某些条件并在满足条件时采取一些措施。这是代码:

const sqlite3 = require('sqlite3').verbose();
main();

async function main() {
    let ordersDb = await createDbConnection('./ProcessedOrders.db');
    var orderProcessed = await orderAlreadyProcessed(ordersDb, "555");
    console.log("orderProcessed = " + orderProcessed);
    if (!orderProcessed) {
        console.log("So condition is met!");
    }
}


async function orderAlreadyProcessed(ordersDb, orderNumberStr) {
    console.log('starting orderAlreadyProcessed function'); //DEBUG
    var result;
    var query = 'select count(SoldOrderNumber) as "recsCount" from ProcessedSoldOrders where SoldOrderNumber = ?;';
    await ordersDb.get(query
    ,[orderNumberStr]
    ,(err, row) => {
        console.log('Row with count = ' + …
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous node.js async-await node-sqlite3

1
推荐指数
2
解决办法
3785
查看次数

使用 Node js 时 Sqlite 出现问题。Like 运算符和参数

所以我尝试根据用户输入选择行,如下所示:

db.all(
  'SELECT * FROM houses WHERE location LIKE "%$input%"',
  {
    $input: name,
  },
  (error, rows) => {
    res.send(rows);
  }
);
Run Code Online (Sandbox Code Playgroud)

但是,数据库以未定义的值进行响应。我能做些什么?

sql sqlite node.js sql-like node-sqlite3

1
推荐指数
1
解决办法
1391
查看次数

sqlite3更新查询刷新电子渲染器进程

我意识到,当我在 Electron JS 中使用 knex (使用 sqlite3)更新查询时,查询完成后,渲染器进程会自动刷新!例如:

索引.html:

ipc.send('UpdateTheRow', {'Id': 1, 'Title': 'foo', 'Date': '01-01-2020'});
Run Code Online (Sandbox Code Playgroud)

main.js

    ipcMain.on('UpdateTheRow', (event, newData)=>{
        knex('Products').where({id: newData.Id}).update({
            title: newData.Title,
            enter_date: newData.Date
        }).then(function (res) {
            console.log(res);
        });
    });
Run Code Online (Sandbox Code Playgroud)

运行更新请求后,控制台打印 Response ,但渲染器刷新!

换句话说,当我们做这样的事情时:

在 Main.js 中使用以下命令重新获取 console.log:

indexPage.webContents.send("EditedTheRow", res);
Run Code Online (Sandbox Code Playgroud)

在index.html中

ipc.on('EditedTheRow', (event, response) => {
   alert('Updated');
}
Run Code Online (Sandbox Code Playgroud)

查询工作正常,但我们在渲染器中没有收到任何警报

抱歉我的英语不好。

javascript node.js knex.js electron node-sqlite3

0
推荐指数
1
解决办法
994
查看次数