【问题标题】:My database getting stored in /data/data/package-name/app_database/file__0/*.db in Android through Phonegap我的数据库通过Phonegap存储在Android中的/data/data/package-name/app_database/file__0/*.db
【发布时间】:2012-03-04 17:10:19
【问题描述】:

我正在尝试将一些数据存储在我使用 phonegap 创建的数据库中

document.addEventListener("deviceready", onDeviceReady, false);

function populateDB(tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
}

// Query the database
//
function queryDB(tx) {
tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);
}

// Query the success callback
//
function querySuccess(tx, results) {
    var len = results.rows.length;
    console.log("DEMO table: " + len + " rows found.");
    for (var i=0; i<len; i++){
        console.log("Row = " + i + " ID = " + results.rows.item(i).id + " Data =  " +    results.rows.item(i).data);
   }
}

// Transaction error callback
//
function errorCB(err) {
    console.log("Error processing SQL: "+err.code);
}

// Transaction success callback
//
function successCB() {
    var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
    db.transaction(queryDB, errorCB);
}

// PhoneGap is ready
//
function onDeviceReady() {
    var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
    db.transaction(populateDB, errorCB, successCB);
}

但是数据库没有被创建..而是将其保存在 /data/data/package-name/app_database/file__0/00000000000000001.db 中

我想把数据保存在/data/data/package-name/database/Database.db中

怎么做?

【问题讨论】:

  • 你为什么不使用 sharedpreferences ?
  • 我正在使用phonegap开发它,因为这个代码对于所有移动平台都是通用的,这可以通过sqlite实现......这就是为什么我更喜欢sqlite
  • 我不明白你是如何创建数据库的,我只是在使用“base = context.openOrCreateDatabase("db", Context.MODE_PRIVATE, null);"它总是在 /data/data/package-name/database/db...
  • 是的,这是在 Android 中创建数据库的原生方式。我正在尝试使用 Phonegap API 创建数据库。

标签: javascript android cordova sqlite


【解决方案1】:

您无法更改创建数据库的目录,除非您修改 PhoneGap 源代码。我想一个更好的问题是,为什么要将数据保存在 /data/data/package-name/database/Database.db 而不是 /data/data/package-name/app_database/file__0/00000000000000001.db 中?

更新:现在我更好地理解了这个要求,你能够做到这一点的唯一方法是write a plugin for Android,它将 JavaScript 端连接到本机 Java 端。然后,您可以打开并读取您的服务创建和填充的 Java 数据库。

Marc Murphy (CommonsWare) 在这个thread 中解释了原因。

【讨论】:

  • 嗨西蒙,感谢您的回复....实际上我有一个在后台运行的服务,并用一些值填充 /data/data/package-name/database/Database.db 数据库。现在从 phonegap 方面,我想读取这个数据库值并修改它......
  • 由于 KitKat 数据库文件现在位于 /data/data/&lt;your app package name&gt;/app_webview/databases/file__0/1
【解决方案2】:

请参阅:http://developer.android.com/guide/topics/data/data-storage.html#dbhttp://developer.android.com/guide/developing/tools/adb.html#sqlite。创建数据库时可以指定数据库名,在/data/data/package name/databases/中会创建一个.db的文件名。

抱歉,您提供的代码没有显示数据库是如何创建的。

【讨论】:

  • 我已经使用 Phonegap API 创建了数据库,例如 window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
【解决方案3】:

我建议您为此目的使用 sqlite 的 LocalStorage instread。 您可以参考本地存储:http://docs.phonegap.com/en/1.0.0/phonegap_storage_storage.md.html

示例

localStorage.setItem("ItemName",yourItem);

localStorage.getItem("ItemName");

它提供了一种更好的方式来轻松有效地存储和检索您的数据

【讨论】:

    【解决方案4】:

    正如documentation 所述,Phonegap 并不真正使用 SQLite 数据库,而是使用 WebSQL 实现或 localStorage。

    如果你想使用原生 SQLite,请查看this plugin,数据库操作的语法与 Phonegap 的 Storage API 几乎相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多