2

我正在尝试找出在我正在使用 PhoneGap 开发的跨平台应用程序中存储数据的最佳方式。API 说明建议使用 WebSQL,但这将不再受支持,IndexedDB 目前仅适用于 Windows / Blackberry。

这里有很多不同的问题,很多答案真的很老而且这个,但我似乎找不到最流行的 js 库来使用现有数据库发布应用程序?(即简化事情的好帮手.js)。

我查看了 HTML5SQL,但文档非常稀疏,我不确定。

4

2 回答 2

1

我不知道这个问题是否会因为更多偏好而被标记,但如果有帮助的话,我会给我 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,所以我选择了加载时复制方法。祝你好运!

于 2014-03-06T14:03:54.070 回答
0

最新更新: 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.

于 2014-06-18T13:24:55.570 回答