在PhoneGap应用程序中导出SQLite数据库

6
我们有一个使用cordova(phonegap)和自己的sqlite数据库的应用程序(我是说我们没有安装外部sqlite)。
我们需要将数据库备份到SD存储卡,但我们在从phonegap导出sqlite文件到SD时遇到了问题。
是否有人可以帮助我们?

你需要更具体地提出问题。你尝试过什么? - NuSkooler
我也在寻找同样的解决方案。你找到了解决方法吗? - Amol Chakane
3个回答

2

我知道已经晚了几年,但这对我在 Cordova 5.4.1 上运行 Android(我认为 iOS 也使用 cordova.file.application,但我还没有测试过)非常有效:

this.getdbfilename = function () {
    return "dbfile.db";
};

this.getdbdirectory = function() {
    return cordova.file.applicationStorageDirectory + "databases/";
};


// copy DB file out to non-private app directory.
this.copyDBFileOut = function (outfilename) {
    window.resolveLocalFileSystemURL(this.getdbdirectory() + this.getdbfilename(), function (fileEntry) {
        window.resolveLocalFileSystemURL((cordova.file.externalDataDirectory || cordova.file.documentsDirectory), function(dirEntry) {
            fileEntry.copyTo(dirEntry, outfilename, function() { console.log("copyDBFileOut() succeeded");}, this.errorHandler);
        });
      });
  };

先生,我们可以将数据库文件复制到SD卡中,或者存储到服务器上。如果我们丢失了手机,用户将要求从其他设备恢复数据库文件,然后我们需要将其恢复到相同的文件中,对吧?但是我已经尝试了几天,没有找到任何可行的解决方案。如果您知道,请帮助我检查一下。谢谢! - user3107283

1
这在使用Cordova 3.5和org.apache.cordova.file 1.2.1时听起来不错。对于不同的路径需要进行一些变化。
window.resolveLocalFileSystemURL("file:///data/data/my-app-name/databases/name-of.db", function(fs) {
                var parent = "file://mnt/external_sd/";
                var newName = "mybackup.db";
                window.resolveLocalFileSystemURL(parent, function(directoryEntry) {
                    fs.copyTo(directoryEntry, newName, function() {
                        alert("Backup ok");
                    }, failFiles);
                });
            }, failFiles);

function failFiles(error) {        
  if (error.code == FileError.NOT_FOUND_ERR) alert("Message : NOT_FOUND_ERR" )
  else if (error.code == FileError.SECURITY_ERR) alert("Message : SECURITY_ERR" )
  else if (error.code == FileError.ABORT_ERR) alert("Message : ABORT_ERR" )
  else if (error.code == FileError.NOT_READABLE_ERR) alert("Message : NOT_READABLE_ERR" )
  else if (error.code == FileError.ENCODING_ERR) alert("Message : ENCODING_ERR" )
  else if (error.code == FileError.NO_MODIFICATION_ALLOWED_ERR) alert("Message : NO_MODIFICATION_ALLOWED_ERR" )
  else if (error.code == FileError.INVALID_STATE_ERR) alert("Message : INVALID_STATE_ERR" )
  else if (error.code == FileError.SYNTAX_ERR) alert("Message : SYNTAX_ERR" )
  else if (error.code == FileError.INVALID_MODIFICATION_ERR) alert("Message :  INVALID_MODIFICATION_ERR" )
  else if (error.code == FileError.QUOTA_EXCEEDED_ERR) alert("Message : QUOTA_EXCEEDED_ERR" )
  else if (error.code == FileError.PATH_EXISTS_ERR) alert("Message : PATH_EXISTS_ERR" )  
}  

先生,我们可以将数据库文件复制到SD卡中,或者存储到服务器上。如果我们丢失了手机,用户将要求从其他设备恢复数据库文件,然后我们需要将其恢复到相同的文件中,对吧?但是我已经尝试了几天,没有找到任何可行的解决方案。您能否请检查一下这个问题? - user3107283

0
很久以前...但我认为这是解决方案:
function failFiles(error) {        
  if (error.code == FileError.NOT_FOUND_ERR) alert("Message : NOT_FOUND_ERR" )
  else if (error.code == FileError.SECURITY_ERR) alert("Message : SECURITY_ERR" )
  else if (error.code == FileError.ABORT_ERR) alert("Message : ABORT_ERR" )
  else if (error.code == FileError.NOT_READABLE_ERR) alert("Message : NOT_READABLE_ERR" )
  else if (error.code ==   FileError.ENCODING_ERR) alert("Message : ENCODING_ERR" )
  else if (error.code == FileError.NO_MODIFICATION_ALLOWED_ERR) alert("Message : NO_MODIFICATION_ALLOWED_ERR" )
  else if (error.code == FileError.INVALID_STATE_ERR) alert("Message : INVALID_STATE_ERR" )
  else if (error.code == FileError.SYNTAX_ERR) alert("Message : SYNTAX_ERR" )
  else if (error.code == FileError.INVALID_MODIFICATION_ERR) alert("Message :  INVALID_MODIFICATION_ERR" )
  else if (error.code == FileError.QUOTA_EXCEEDED_ERR) alert("Message : QUOTA_EXCEEDED_ERR" )
  else if (error.code == FileError.PATH_EXISTS_ERR) alert("Message : PATH_EXISTS_ERR" )  
}  

function successDump() {    
}  

//Export DB. Get the file        file:///data/data/yourproject/app_database/file__0/0000000000000001.db  
//and save in the SD with the name yourproject.db
function copyBdtoSD() {    
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, successDump, failFiles);            window.resolveLocalFileSystemURI("file:///data/data/yourproject/app_database/file__0/0000000000000001.db", copyFileToSd, failFiles);
}


function copyFileToSd(entry) {    
    var parent = "file:///mnt/sdcard",
        parentName = parent.substring(parent.lastIndexOf('/')+1),        
        parentEntry = new DirectoryEntry(parentName, parent);       
    var newName = "yourproject.db";

   // copy the file
   entry.copyTo(parentEntry, newName, successExport, failFiles);    
}

先生,我们可以将数据库文件复制到SD卡中,或者存储到服务器中。如果我们丢失了手机,用户将要求从其他设备恢复数据库文件,那么我们需要将其恢复到同一文件中,对吧?但是我已经尝试了几天,没有得到任何可行的解决方案。您能否帮忙检查一下这个问题? - user3107283

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接