sql - Electron 和 Sqlite:SQLITE_NOTADB:文件不是数据库
问题描述
我尝试使用包含已经准备好的数据集的 sqlite 数据库构建一个 Electron.js 应用程序。我首先通过 sqlite3 命令创建了一个 stock.db 文件,然后以这种方式转储它:
sqlite3 股票.db .dump > 股票.sqlite
stock.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...
然后我将此文件放入我的电子目录并尝试在我的代码中使用 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
,name
来自symbols
- SQLITE_NOTADB:文件不是数据库] { errno:26,代码:'SQLITE_NOTADB'}
我在这里做错了什么?我应该如何修复我的 .sqlite 文件以使我的应用程序可读。
解决方案
您正在从您的数据库创建 SQL 转储stocks.sqlite
,而不是使用您之前创建的实际数据库文件。
如果要使用 knex 迁移创建新的 sqlite3 数据库,可以设置为使用一些不存在的文件并使用APIknex
初始化表。knex.schema.*
虽然使用预先创建的数据库就可以了。
我在您提到的评论中看到,应该使用database.sqlite
命名文件。这也很好,只需将数据库二进制文件重命名为具有.sqlite
扩展名。
从谷歌所有的文件信息页面似乎都提到这.sqlite
实际上是二进制数据库文件,而不是纯 SQLite 兼容的文本.sql
转储。
https://file.org/extension/sqlite http://www.manifold.net/doc/mfd9/sqlite.htm
尽管 sqlite3 文档不强制使用任何文件扩展名。除了为了最大的兼容性,他们提到名称中的 8+3 个字符是最好的。
推荐阅读
- python - Pandas 系列 str.extract 无法匹配 RegEx 模式
- r - Azure ML 和 r 脚本
- ruby-on-rails - 在 Active Record 中乘以列?
- java - 如何使用 fat-JAR 正确运行 Akka 应用程序?(未找到密钥“akka.remote.log-received-messages”的配置设置)
- ios - 如何在 Swift 中按顺序对一组图像视图进行动画处理?
- c# - 如何在 xaml 中创建可扩展(下拉)表?
- python - 即使从 ckpt 文件恢复后,Tensorflow 权重也没有恢复
- sqlite - 我可以观察基于变量查询的 LiveData 对象吗?
- php - 在codeigniter中通过ajax post提交表单数据时如何停止重定向到控制器页面
- python - 如何在 Django auth_views 中使用我自己的模板?