Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 在React应用程序中加载预构建的SQlite数据库(带或不带PockDB)的正确方法是什么_Reactjs_Sqlite_Pouchdb_Preload - Fatal编程技术网

Reactjs 在React应用程序中加载预构建的SQlite数据库(带或不带PockDB)的正确方法是什么

Reactjs 在React应用程序中加载预构建的SQlite数据库(带或不带PockDB)的正确方法是什么,reactjs,sqlite,pouchdb,preload,Reactjs,Sqlite,Pouchdb,Preload,目前,我正在编写一个React应用程序,并努力从SQlite数据库进行简单的读取 由于问题不清楚而编辑: ***目标是在没有任何后端的情况下从数据库中读取,因为它需要从数据库中读取数据,即使它处于脱机状态 ***我的目标是一次性文件转换,然后离线查询。但我不想手动操作,因为大约有6k+个注册表 ***或者不使用任何API从浏览器进行SQL查询,但我需要支持Internet Explorer,因此WebSQL不是一个选项。我尝试过sqlite3库,但无法使用CreateReact应用程序 我尝试的

目前,我正在编写一个React应用程序,并努力从SQlite数据库进行简单的读取

由于问题不清楚而编辑:

***目标是在没有任何后端的情况下从数据库中读取,因为它需要从数据库中读取数据,即使它处于脱机状态

***我的目标是一次性文件转换,然后离线查询。但我不想手动操作,因为大约有6k+个注册表

***或者不使用任何API从浏览器进行SQL查询,但我需要支持Internet Explorer,因此WebSQL不是一个选项。我尝试过sqlite3库,但无法使用CreateReact应用程序

我尝试的解决方案是使用PockDB读取文件,但我得出的结论是,如果不使用cordova,就不可能用PockDB预加载SQlite文件。我对它不满意,我不希望任何服务器运行,甚至不希望使用某种适配器

那么这是正确的做事方式吗

有没有什么方法可以让我不丢失.db数据,而不得不手动将其全部转换

我是否应该忘记在IE上支持此功能


谢谢:

因为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输出。不过,要看到并记住,这些人的学习曲线相当陡峭。