Export sqlite db in phonegap app

匿名 (未验证) 提交于 2019-12-03 08:46:08

问题:

We have an app using cordova (phonegap) and his own sqlite DB (I mean we didn't install an external sqlite).

We need to backup the DB into the SD memory but we have problems to export the sqlite file from phonegap to SD.

May anybody help us?

回答1:

This sounds good with Cordova 3.5 and org.apache.cordova.file 1.2.1

Some variations needed for differents path.

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" )   }   


回答2:

A couple years late, I know, but this is working for me on Cordova 5.4.1 and running on Android (I think iOS uses cordova.file.application too, but I have not tested yet):

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);         });       });   }; 


回答3:

Many time ago...but i think this was the solution:

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);     } 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!