electron和sqlite:sqlite\u notadb:file不是数据库

5ktev3wc  于 2021-07-27  发布在  Java
关注(0)|答案(1)|浏览(382)

我尝试用包含已准备好的数据集的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文件:
[错误:选择 symbol , namesymbols -sqlite\u notadb:文件不是数据库]{errno:26,代码:'sqlite\u notadb'}
我做错什么了?我应该如何修复我的.sqlite文件,使其对我的应用程序可读。

v9tzhpje

v9tzhpje1#

您正在从数据库创建sql转储 stocks.sqlite ,而不是使用先前创建的实际数据库文件。
如果要使用knex迁移创建新的sqlite3db,可以设置 knex 使用一些不存在的文件并用 knex.schema.* API。尽管使用预先创建的数据库是很好的。
我在你提到的评论中看到,应该用 database.sqlite 命名文件。这也很好,只要将数据库二进制文件重命名为 .sqlite 分机。
从谷歌所有的文件信息页面似乎都提到了这一点 .sqlite 实际上是二进制数据库文件,而不是纯sqlite兼容的文本文件 .sql 倾倒。
https://file.org/extension/sqlitehttp://www.manifold.net/doc/mfd9/sqlite.htm
尽管sqlite3文档不强制任何应该使用的文件扩展名。除了最大的兼容性,他们提到8+3字符的名称是最好的。

相关问题