node.js - 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);
});
该文件存在,因为我得到了正确的console.log
消息,它看起来像:
/tmp/.mount_xxxxxx/resources/app.asar.unpacked/dist/assets/sqlite.db
但是,new sqlite.Database(...)
由于文件不存在,我收到以下错误:
错误:SQLITE_CANTOPEN:无法打开数据库文件
解决方案
artiebits建议我查看asarUnpack,这确实是正确的方法。
我解决了:
1)将以下内容添加到我的electron-builder.json
:
"asarUnpack": [
"dist/assets/sqlite.db"
],
2)替换:
const path = `${__dirname}/assets/sqlite.db`;
和:
const path = `${__dirname}/assets/sqlite.db`.replace('app.asar', 'app.asar.unpacked');
推荐阅读
- javascript - 使用 Autodesk forge API 扫描 3D 模型外表面并创建模型副本
- python - YAMLError:映射值
- javascript - 尝试使用 JavaScript 获取输入数字的值时出错
- android - Kotlin - 使用 ION 获取多个 JSON 文件时避免嵌套回调
- java - Java - 将自定义光标热点设置为图像中心(.png)
- heroku - 在 Heroku 上使用 Google 的 TextToSpeech API
- c++ - 在 64 位系统上在低地址分配内存的最可靠/可移植的方法是什么?
- javascript - 使用样式对象传递上下文时,上下文如何工作?
- python - 从 selenium get_attribute('href') 中删除 'mailto:'
- javascript - Vuejs:第三次按下按钮后,我需要将按钮重置回名字