如何在从cordova创建的本机代码中使用相同的android SQLite DB?

Posted

技术标签:

【中文标题】如何在从cordova创建的本机代码中使用相同的android SQLite DB?【英文标题】:How to use the same android SQLite DB in native code created from cordova? 【发布时间】:2019-11-26 00:08:31 【问题描述】:

我已经在我的 cordova 应用程序中设置了一个 SQLite 数据库。然后我需要开发一个新的插件来读取这个数据库。那么如何从我的本机代码访问从 cordova 创建的数据库呢?

这就是我创建数据库的方式:

var shortName = 'mydb1';
var version = '1.0';
var displayName = 'my database';
var mydb = openDatabase(shortName, version, displayName, 100000000);

我创建了一个名为“student”的表并插入了一些数据。一切似乎都运行良好。我什至可以查看插入的数据。

现在我需要使用 java 开发一个插件,并且该插件需要读取我刚刚创建的“学生”表。这是我的代码:

SQLiteDatabase mydatabase = openOrCreateDatabase("mydb1",MODE_PRIVATE,null);
Cursor resultSet = mydatabase.rawQuery("SELECT * FROM student", null);
resultSet.moveToFirst();

return resultSet.getString(0);

我上面的代码产生了以下错误:

android.database.sqlite.SQLiteException: no such table: student (code 1): , while compiling: SELECT * FROM student
Error Code : 1 (SQLITE_ERROR)
Caused By : SQL(query) error or missing database.
(no such table: student (code 1): , while compiling: SELECT * FROM student)

请帮忙

附加信息:

我已经检查了我的 java 代码上的包名,我非常确定 我用的是正确的 这是一个使用cordova 2.2.0 的非常古老的应用程序

【问题讨论】:

【参考方案1】:

通过使用数据库路径解决了它。似乎cordova使用的数据库路径不同。因此,我需要使用数据库的完整路径。这是我如何解决的

SQLiteDatabase mydatabase = openOrCreateDatabase("/data/data/com.my.packagename/app_webview/databases/file__0/1",MODE_PRIVATE,null);

我实际上必须 root 我的设备才能真正找到这个确切的路径。

【讨论】:

以上是关于如何在从cordova创建的本机代码中使用相同的android SQLite DB?的主要内容,如果未能解决你的问题,请参考以下文章

如何从cordova 3.x调用本机函数

如何使用手机的本机应用程序打开图像 - Cordova / phonegap

如何从 Cordova 插件添加本机视图

使用 Cordova 进行混合移动应用程序开发

Cordova/iOS:如何关闭使用 InAppBrowser 打开的本机浏览器窗口?

离子/ cordova与2020年原生反应