Reactjs 在React应用程序中加载预构建的SQlite数据库(带或不带PockDB)的正确方法是什么
目前,我正在编写一个React应用程序,并努力从SQlite数据库进行简单的读取 由于问题不清楚而编辑: ***目标是在没有任何后端的情况下从数据库中读取,因为它需要从数据库中读取数据,即使它处于脱机状态 ***我的目标是一次性文件转换,然后离线查询。但我不想手动操作,因为大约有6k+个注册表 ***或者不使用任何API从浏览器进行SQL查询,但我需要支持Internet Explorer,因此WebSQL不是一个选项。我尝试过sqlite3库,但无法使用CreateReact应用程序 我尝试的解决方案是使用PockDB读取文件,但我得出的结论是,如果不使用cordova,就不可能用PockDB预加载SQlite文件。我对它不满意,我不希望任何服务器运行,甚至不希望使用某种适配器 那么这是正确的做事方式吗 有没有什么方法可以让我不丢失.db数据,而不得不手动将其全部转换 我是否应该忘记在IE上支持此功能Reactjs 在React应用程序中加载预构建的SQlite数据库(带或不带PockDB)的正确方法是什么,reactjs,sqlite,pouchdb,preload,Reactjs,Sqlite,Pouchdb,Preload,目前,我正在编写一个React应用程序,并努力从SQlite数据库进行简单的读取 由于问题不清楚而编辑: ***目标是在没有任何后端的情况下从数据库中读取,因为它需要从数据库中读取数据,即使它处于脱机状态 ***我的目标是一次性文件转换,然后离线查询。但我不想手动操作,因为大约有6k+个注册表 ***或者不使用任何API从浏览器进行SQL查询,但我需要支持Internet Explorer,因此WebSQL不是一个选项。我尝试过sqlite3库,但无法使用CreateReact应用程序 我尝试的
谢谢:因为coach/pocket数据库是面向文档的数据库,所以所有的记录也就是文档,只有JSON也就是JS对象。在我的RN应用程序中,当我遇到类似的任务时,我只是将所有我想预填充到PockDB中的文档放入JS对象数组中,作为模块导入到我的应用程序中,然后在应用程序初始化期间将它们作为必要的文档写入PDB。这就是所有的预填充。如何将SQL DB记录导出为JSON—这当然取决于您希望在PDB中使用的源数据库结构和数据逻辑。尝试以下方法:
sqlite3 example "DROP TABLE IF EXISTS some_table;";
sqlite3 example "CREATE TABLE IF NOT EXISTS some_table (id INTEGER PRIMARY KEY AUTOINCREMENT, anattr VARCHAR, anotherattr VARCHAR);";
sqlite3 example "INSERT INTO some_table VALUES (NULL, '1stAttr', 'AttrA');";
sqlite3 example "INSERT INTO some_table VALUES (NULL, '2ndAttr', 'AttrB');";
## Create three JSON fragment files
sqlite3 example ".output result_prefix.json" "SELECT '{ \"docs\": ['";
sqlite3 example ".output rslt.json" "SELECT '{ \"_id\": \"someTable_' || SUBSTR(\"000000000\" || id, LENGTH(\"000000000\" || id) - 8, 9) || '\", \"anattr\": \"' || anattr || '\", \"anotherattr\": \"' || anotherattr || '\" },' FROM some_table;";
sqlite3 example ".output result_suffix.json" "SELECT '] }'";
## strip trailing comma of last record
sed -i '$ s/.$//' rslt.json;
## concatenate to a single file
cat result_prefix.json rslt.json result_suffix.json > result.json;
cat result.json;
您应该能够简单地将上述行粘贴到unix命令行上,并查看输出:
{ "docs": [
{ "_id": "someTable_000000001", "anattr": "1stAttr", "anotherattr": "AttrA" },
{ "_id": "someTable_000000002", "anattr": "2ndAttr", "anotherattr": "AttrB" }
] }
如果你安装了jq,你可以改为
cat result.json | jq .
。。。获得:
{
"docs": [
{
"_id": "someTable_000000001",
"anattr": "1stAttr",
"anotherattr": "AttrA"
},
{
"_id": "someTable_000000002",
"anattr": "2ndAttr",
"anotherattr": "AttrB"
}
]
}
您将在博客文章的第2部分中找到一个如何快速地从JSON文件初始化PockDB的示例
因此,如果您有一个CouchDB服务器可用,您可以执行以下操作:
export COUCH_DB=example;
export COUCH_URL= *** specify yours here ***;
export FILE=result.json;
## Drop database
curl -X DELETE ${COUCH_URL}/${COUCH_DB};
## Create database
curl -X PUT ${COUCH_URL}/${COUCH_DB};
## Load database from JSON file
curl -H "Content-type: application/json" -X POST "${COUCH_URL}/${COUCH_DB}/_bulk_docs" -d @${FILE};
## Extract database with meta data to PouchDB initialization file
pouchdb-dump ${COUCH_URL}/${COUCH_DB} > example.json
## Inspect PouchDB initialization file
cat example.json | jq .
显然,您需要进行一些调整,但上述内容应该不会给您带来任何问题。忘记SQL会有多糟糕?SQL和offline first一起构成了相当尴尬的伙伴关系。与此同时,CouchDB/PouchDB使离线第一几乎不费吹灰之力。Martin Bramwell,有没有办法将.db文件转换为pouch/coach?手动操作并不理想。这是一次性转换还是连续转换?应该是一次性转换。很抱歉,这并不能回答我的问题,我的问题是在web环境中使用适配器加载SQLite文件的正确方法。这些表之间没有任何关系,它们只是没有任何blob的普通表等等,但是我需要一种自动转换的方法,因为这些表上有6000个注册表。但是我需要一种自动转换的方法-第一个问题:转换成什么?这是如何在以后的应用程序中使用的?您标记了PDB,所以我的第一个猜测是您最终需要本地PDB实例和一些必要的数据。如果没有-可能您选择了错误的标签/主题。你想在一天结束时得到什么?浏览器中的SQL数据库?现在还不清楚。我在这里看到的是一个表述不充分的问题。我们不必不断询问更多的细节,也不必猜测你们想要实现什么。请更新您的问题,以解释当您最终让系统按您的要求运行时,系统的相关部分将如何运行。初始启动时会发生什么?在用户第一次连接上?在用户的后续连接上?我只需要在某个给定的时间读取数据,不管它是否在登录上。我需要一次从Sqlite到PockDB的转换,或者以其他方式在浏览器中脱机查询Sqlite。我想问你是否知道推荐的方法是什么,或者它是否存在。那么,这有帮助吗-是的,完全地,只是转换了整个基础:一个切点,对于未来拥有更复杂数据库的读者来说。。。将SQLite数据库转换为MySql相当容易。完成后,您可以利用一些非常强大的工具来生成JSON输出。不过,要看到并记住,这些人的学习曲线相当陡峭。