从Ionic项目中的预填充SQLite数据库读取时出错

时间:2018-09-04 19:57:29

标签: android sqlite typescript ionic-framework

当我尝试从预先填充的SQLite数据库进行读取时收到错误消息:require_once Yii::$app->basePath.'/vendor/campaignmonitor/createsend-php/csrest_subscribers.php'; $wrap = new CS_REST_Subscribers($list_id, $auth);

据我了解,SQLite默认在/ www文件夹中查找mydb.db文件,然后在找不到预填充的mydb.db文件时创建一个空数据库。这就是为什么它找不到“植物”表的原因,因为新创建的空白数据库显然不包含“植物”表。但是,我可以确定数据库位于在/ www文件夹中,并且在终端中运行sqlite3_prepare_v2 failure: no such table 'plant'然后运行sqlite3 mydb.db时,该数据库包含'plant'表。

我不知道为什么它没有从预先填充的mydb.db文件中读取。

文件夹结构(从根目录开始):

.tables

app.component.ts

/src
-/app
--/app.component.ts
/www
-/mydb.db

我已经尝试了在StackOverflow上找到的许多修复程序,例如从设备上擦除应用程序,启动新的离子项目,然后复制应用程序和配置文件,以及在数据库位置设置直接路径,但是仍然不断尝试从它创建的空数据库中读取数据。

1 个答案:

答案 0 :(得分:0)

Cordova-sqlite-storage插件不处理预填充的数据库(在撰写本文时)。我相信您需要 Cordova-sqlite-ext 插件。

从仓库中的README.md(重点是我):

  

2018年9月的新版本将包括以下主要增强功能(litehelpers / Cordova-sqlite-storage#773):

     
      
  • 使用kripken / sql.js的浏览器平台支持   (litehelpers / Cordova-sqlite-storage#576)

  •   
  • cordova-sqlite-storage和cordova-sqlite-ext插件版本为   合并后,不需要更多单独的插件版本来进行预先填充   数据库litehelpers/Cordova-sqlite-storage#529

  •   
  • 包括DefinitelyTyped中的键入   (litehelpers / Cordova-sqlite-storage#768)

  •   

NB。 “ ”包括该操作员。

ionic forum上也有类似的问题。线程中的最后一个帖子开始:

  

Cordova SQLite Storage不使用您应用程序的www文件夹进行存储   数据。

     

移动设备不允许修改应用可执行文件的数据。   这是为了防止安装会在另一个应用程序中覆盖代码的应用程序   应用程序(设想安装WhatsApp,它会破坏所有其他消息传递   应用程序,因此您无法使用它们)。这也使代码无法执行   如果您的应用安全,则将其注入应用并接管操作系统   不好。

该帖子以建议的解决方法继续进行。

ionic论坛上的另一个thread似乎表明您可以在应用中使用 cordova-sqlite-ext 。您可以在该论坛中搜索cordova-sqlite-ext,有几个发布者可以使用它。在该论坛上,cordova-sqlite-ext的许多结果也可以为您指明正确的方向。

老实说,我不认为它实际上是在创建一个空数据库。除非在运行应用程序后“ /www/mydb.db”是一个空数据库(这会让我感到惊讶)。如果确实存在,sqlite会创建在命令行中命名的数据库(如果它不存在),但我怀疑在这种情况下,它只是无法访问命名数据库的行为。

相关问题