当前,我正在编写一个React App,并努力地从SQlite数据库中进行简单的阅读。
由于问题不清楚而编辑:
***目标是从数据库中读取任何后端,因为即使它处于脱机状态,它也需要从数据库中读取。
***我的目标是一次性转换文件,然后只是pouchdb脱机查询。但是我不想手动执行此操作,因为大约有6k多个注册表。
***或者从浏览器中进行的SQL查询,而没有任何API,但是我需要支持Internet Explorer,因此不能选择WebSQL。我已经尝试过sqlite3库,但无法使其与Create React App一起使用。
我尝试的解决方案是使用PouchDB读取文件,但是我得出的结论是,如果不使用Cordova,则无法通过PouchDB PRELOAD 使用SQlite文件(我是对此感到不舒服,我不希望任何服务器运行),甚至不需要某种适配器。
这是正确的做事方式吗?
有什么方法可以使我的.db数据不丢失,而必须手动转换呢?
我应该忘记在IE上支持此功能吗?
谢谢:)
答案 0 :(得分:1)
尝试一下:
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"
}
]
}
在博客文章Prebuilt databases with PouchDB的第2部分中,您将找到一个示例如何从JSON文件快速初始化PouchDB。
因此,如果有可用的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 .
很显然,您需要进行一些修改,但是以上内容不会给您带来任何问题。
答案 1 :(得分:0)
由于Couch / Pouch-DB是面向文档的DB,所有记录(即aka docs)都只有JSON(即JS)对象。在我的RN应用中,当我遇到类似的任务时,我只是将所有要“预先填充”在PouchDB中的文档放在一个JS对象数组中,将其作为模块导入到我的应用中,然后在应用初始化期间将它们作为必要的文档写入PDB中。 。这就是全部人口。如何将SQL DB记录导出为JSON-您可以确定,这取决于源DB结构和要包含在PDB中的数据逻辑。