Cordova Sqlite 插件没有像文档中所说的那样添加扩展名 .db?

Posted

技术标签:

【中文标题】Cordova Sqlite 插件没有像文档中所说的那样添加扩展名 .db?【英文标题】:Cordova Sqlite plugin is not adding the extension .db as it says in docs? 【发布时间】:2014-06-18 17:51:59 【问题描述】:

我们正在测试Cordova Sqlite plugin,看看它是否满足我们对特定应用的需求。到目前为止,我们的简单测试运行良好。但是,我们被困在这一点上。创建数据库时,文档指出:

注意:数据库文件以.db 扩展名创建。

事实上,在我们的测试中,数据库是在没有任何扩展的情况下创建的,后来被发现和读取的。输出与我们的命名完全匹配。例如,在这种情况下:

var _dbName = 'testDB';
var _db = window.sqlitePlugin.openDatabase(name: _dbName);

生成的文件的名称正是 testDB,而不是文档建议的 testDB.db

我们的测试是在模拟器上的 ios 中进行的。我担心这种行为不可靠,并且会在其他平台/硬件上发生变化。我目前无法在 android 上进行测试。

更多上下文...

我关心的具体问题是,一个平台可能期望.db 记录在案,而另一个平台可能不会。这可能是一个问题的原因是我们打算使用预填充的 Sqlite 数据库(由应用程序移动到 openDatabase 之前的适当存储位置)。因此,打包数据库的命名方案将决定局势的成败。

对于未来的读者,请注意...(2014 年 8 月 4 日)

此插件的最新版本使这个问题变得毫无意义。正如他们的发行说明中所述,Android 不再添加 .db 扩展,这使得该插件的行为跨平台更加一致。从他们的发行说明中,截至本次编辑之日:

为了与 iOS 和 WP(8) 版本保持一致,现在为 Android 版本删除了自动“.db”数据库文件扩展名

【问题讨论】:

【参考方案1】:

因此,在查看 SQLitePlugin.m 时,open: 方法具有...

 NSMutableDictionary *options = [command.arguments objectAtIndex:0];
 NSString *dbname = [self getDBPath:[options objectForKey:@"name"]];

...这表明数据库名称是您传递给它的任何名称。我没有看到他们在插件的任何地方附加了“db”扩展名。我不相信 sqlite3_open() 会增强名称,所以我很确定您引用的文档不正确。

【讨论】:

是的,我想你明白了。我查看了getDBPath 方法和这一行:NSString *dbPath = [NSString stringWithFormat:@"%@/%@", appDocsPath, dbFile]; 证实了您自己的观察。 (我不知道为什么我没有想到看源码。)谢谢!【参考方案2】:

我在 android 中使用这个插件。无法告诉您它是否添加了 .db。但我可以向你保证,它在 android 上运行良好。 Android 也使用了与您在问题中提到的完全相同的方式。

var _dbName = 'testDB';
var _db = window.sqlitePlugin.openDatabase(name: _dbName);

【讨论】:

感谢您的快速回复。因此,我关心的具体问题是,一个平台可能期望.db 记录在案,而另一个平台可能不会。这可能是一个问题的原因是我们打算使用预填充的 Sqlite 数据库(由应用程序移动到 openDatabase 之前的适当存储位置)。因此,打包数据库的命名方案将决定局势的成败。

以上是关于Cordova Sqlite 插件没有像文档中所说的那样添加扩展名 .db?的主要内容,如果未能解决你的问题,请参考以下文章

Cordova/Phonegap SQLite 插件

插件cordova-sqlite-storage的问题

Ionic + cordova-sqlite-storage + deviceready = 过渡时没有渲染?

已安装插件(如 cordova-sqlite-storage)的问题

我想裁剪像椭圆形的图像。我正在研究基于离子框架的应用程序。有没有 Cordova 插件? [关闭]

Cordova SQLite - 从一系列 SELECT 查询中获取结果