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