sql - Electron 和Sqlite : SQLITE_NOTADB: file is not a database

标签 sql sqlite electron knex.js

我尝试使用包含已准备好的数据集的sqlite数据库构建Electron.js应用程序。我首先通过sqlite3命令创建了一个stock.db文件,然后以这种方式将其转储:

sqlite3 stocks.db .dump > stocks.sqlite


stocks.sqlite语法非常简单:
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE "records" (
    "TICKER"    varchar(255) NOT NULL,
    "DAY"   varchar(155) NOT NULL,
    "TIME"  varchar(255) NOT NULL,
    "OPEN"  varchar(255) NOT NULL,
    "HIGH"  varchar(255) NOT NULL,
    "LOW"   varchar(255) NOT NULL,
    "CLOSE" varchar(255) NOT NULL,
    "VOL"   varchar(255) NOT NULL,
    "id"    int(11) NOT NULL
);
INSERT INTO "records" VALUES...
CREATE TABLE "symbols" (
    "id"    int(11) NOT NULL,
    "name"  varchar(50) NOT NULL,
    "symbol"    varchar(50) NOT NULL
);
INSERT INTO "symbols" VALUES...
然后,将这个文件放到我的 Electron 目录中,并尝试使用knex在我的代码中调用它:
const knex = require('knex')({
    client: "sqlite3",
    connection: {
        filename: "./stocks.sqlite"
    }
})

let resault = knex.select('symbol', 'name').from('symbols')
        resault.then(rows => {
            console.log(rows)
            win.webContents.send('resultSend', rows)
})
.catch(e => console.log(e))
然后我的系统无法将其识别为正确的sqlite文件:

[Error: select symbol, name from symbols - SQLITE_NOTADB: file is not a database] { errno: 26, code: 'SQLITE_NOTADB' }


我在这里做错了什么?我应该如何修复.sqlite文件以使其对我的应用程序可读。

最佳答案

您正在从数据库stocks.sqlite创建SQL转储,而不是使用之前创建的实际数据库文件。
如果要通过knex迁移创建新的sqlite3 DB,则可以将knex设置为使用一些不存在的文件,并使用knex.schema.* API初始化表。虽然使用预先创建的数据库就可以了。
我在您提到的评论中看到,应该使用名为file的database.sqlite。这也很好,只需将数据库二进制文件重命名为.sqlite扩展名即可。
从Google来看,所有的fileinfo页面似乎都提到.sqlite实际上是二进制数据库文件,而不是与SQLite兼容的纯文本.sql转储。
https://file.org/extension/sqlite
http://www.manifold.net/doc/mfd9/sqlite.htm
尽管sqlite3 docs不会强制使用任何文件扩展名。除了为了最大的兼容性,他们提到名称中最好是8 + 3个字符。

关于sql - Electron 和Sqlite : SQLITE_NOTADB: file is not a database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63161867/

相关文章:

sql - HAVING 和 SELECT 中的计算是否意味着它将执行两次?

sql - 如何创建一个插入但随后返回插入数据的事务

mysql - 按月使用组对 1 月至 12 月进行排序

node.js - Sequelize : findAll is not a function

python - 异步 SQLite python

javascript - 从8到9的 Angular 更新给测试框架带来了问题

mysql - 如何在mySQL中动态选择列名

java - 添加到数据库时出现空指针异常

npm - 无法启动 Electron 应用程序 - 缺少 package.json

javascript - Webpack将 “auto/”添加到内置html文件中的脚本标签中