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?的主要内容,如果未能解决你的问题,请参考以下文章
Ionic + cordova-sqlite-storage + deviceready = 过渡时没有渲染?
已安装插件(如 cordova-sqlite-storage)的问题