在React App中使用或不使用PouchDB加载预建SQlite数据库的正确方法是什么

时间:2019-02-23 15:37:38

标签: reactjs sqlite pouchdb preload

当前,我正在编写一个React App,并努力地从SQlite数据库中进行简单的阅读。

由于问题不清楚而编辑

***目标是从数据库中读取任何后端,因为即使它处于脱机状态,它也需要从数据库中读取。

***我的目标是一次性转换文件,然后只是pouchdb脱机查询。但是我不想手动执行此操作,因为大约有6k多个注册表。

***或者从浏览器中进行的SQL查询,而没有任何API,但是我需要支持Internet Explorer,因此不能选择WebSQL。我已经尝试过sqlite3库,但无法使其与Create React App一起使用。

我尝试的解决方案是使用PouchDB读取文件,但是我得出的结论是,如果不使用Cordova,则无法通过PouchDB PRELOAD 使用SQlite文件(我是对此感到不舒服,我不希望任何服务器运行),甚至不需要某种适配器。

这是正确的做事方式吗?

有什么方法可以使我的.db数据不丢失,而必须手动转换呢?

我应该忘记在IE上支持此功能吗?

谢谢:)

2 个答案:

答案 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中的数据逻辑。