将SQLite数据库文件备份/还原到应用程序存储外部的位置

时间:2015-09-24 00:48:49

标签: android sqlite phonegap-plugins cordova-plugins

我已使用file:///data/data/my.package.name/databases/data.db将我的.db文件从file:///storage/sdcard0/data.db成功备份到fileEntry.copyTo(),但是将恢复数据库文件发送回应用程序时出现问题。

如果我将备份文件复制到file:///android_asset/www/,我收到FileError错误代码1000,如果我直接将文件复制到file:///data/data/my.package.name/databases/,则不会发生错误,但我的应用程序仍在读取空数据库恢复完成。

我的恢复数据库代码:

function performDBRestore() {
  window.requestFileSystem(
      LocalFileSystem.PERSISTENT, 0,
      function(fileSystem) {
          window.resolveLocalFileSystemURL(
              "file:///storage/sdcard0/data.db",
              function(fileEntry) {
                  window.resolveLocalFileSystemURI(
                      "file:///data/data/my.package.name/databases/",
                      function(directoryEntry) {
                          fileEntry.copyTo(directoryEntry, "data.db",
                              function (fileEntry) {
                                  console.log("Restore success!");
                              },
                              function (error) { //no error, but db still empty while open
                                  console.log("Restore fail!");
                              }
                          );
                      },
                      function(error) {
                          // if I copy backup file to "file:///android_asset/www/",
                          // I got errCode 1000 here
                      }
                  );
              },
              function (error) {
                  //some error handling....
              }
          );
      },
      function(error) {
          //some error handling....
      }
   );
}

我的开放式数据库代码:

var db = window.sqlitePlugin.openDatabase({name: "data.db"});

顺便说一下,如果我将备份文件复制到file:///android_asset/www/,我是否可以按照以下方式打开数据库?

var db = window.sqlitePlugin.openDatabase({name: "data.db", createFromLocation: 1});

有什么想法吗?非常感谢。

1 个答案:

答案 0 :(得分:0)

我发现实际上我的代码恢复了data.db文件,但是在我退出应用程序并重新启动它之前,我无法获取已恢复的数据库数据。我不知道为什么,但无论如何,data.db确实恢复了。

相关问题