我正在尝试找出在我正在使用 PhoneGap 开发的跨平台应用程序中存储数据的最佳方式。API 说明建议使用 WebSQL,但这将不再受支持,IndexedDB 目前仅适用于 Windows / Blackberry。
这里有很多不同的问题,很多答案真的很老而且这个,但我似乎找不到最流行的 js 库来使用现有数据库发布应用程序?(即简化事情的好帮手.js)。
我查看了 HTML5SQL,但文档非常稀疏,我不确定。
我不知道这个问题是否会因为更多偏好而被标记,但如果有帮助的话,我会给我 2 美分。
我已经能够使用带有 Phonegap/Cordova 的 SQLite 来发布带有现有数据库的应用程序。基本上我在 Android 中的做法是使用 lite4cordova SQLite 插件:
https://github.com/lite4cordova/Cordova-SQLitePlugin
在加载的本机代码中,我会检查默认目录以查看是否存在具有特定名称的数据库:
try {
File dbFile = getDatabasePath("data.db");
Log.v("info", "dbfiledir: " + dbFile.getAbsolutePath());
if (!dbFile.exists()) {
this.copy("data.db", dbFile.getAbsolutePath());
}
} catch (Exception e) {
e.printStackTrace();
}
如果不存在,将数据库文件从 assets 文件夹复制到默认数据库目录:
void copy(String file, String folder) throws IOException {
File CheckDirectory;
CheckDirectory = new File(folder);
String parentPath = CheckDirectory.getParent();
File filedir = new File(parentPath);
//File file2 = new File(file);
//Log.v("info", "filedir: " + file2.getAbsolutePath());
if (!filedir.exists()) {
if (!filedir.mkdirs()) {
return;
}
}
InputStream in = this.getApplicationContext().getAssets().open(file);
File newfile = new File(folder);
OutputStream out = new FileOutputStream(newfile);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0)
out.write(buf, 0, len);
in.close();
out.close();
}
现在,当应用程序加载时,它只会在数据库不存在时复制。我可以简单地使用打开数据库(语法可能因插件而异):
db = window.sqlitePlugin.openDatabase({
name : "data"
});
我很快就会在 iOS 端执行相同的逻辑,但我认为它应该同样简单。
话虽如此,http://plugreg.com 上列出了一个插件,它提供了一个帮助库,用于使用 WebSQL 传送预填充的数据库:
https://github.com/Smile-SA/cordova-plugin-websqldatabase-initializer
我想在我的项目中使用 SQLite,所以我选择了加载时复制方法。祝你好运!
最新更新: MS Open Tech 的新跨平台 Cordova WebSQL 插件
Microsoft Open Technologies is publishing the new open source
WebSQL 插件 for Apache Cordova and PhoneGap. This plugin allows developers to integrate a persistent SQL-based local storage solution in their Cordova apps using the exact same JavaScript code across Android, iOS, Windows Phone and Windows Store.