当我尝试从预先填充的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上找到的许多修复程序,例如从设备上擦除应用程序,启动新的离子项目,然后复制应用程序和配置文件,以及在数据库位置设置直接路径,但是仍然不断尝试从它创建的空数据库中读取数据。
答案 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会创建在命令行中命名的数据库(如果它不存在),但我怀疑在这种情况下,它只是无法访问命名数据库的行为。