gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:39:28 25 4
gpt4 key购买 nike

我尝试使用包含已准备好的数据集的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: fileis 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com