首页 > 解决方案 > 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:无法打开数据库文件

标签: node.jsangularsqliteelectronnode-sqlite3

解决方案


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');

推荐阅读