Export sqlite db to phonegap application

We have an application using cordova (phonegap) and its own sqlite DB (I mean that we did not install external sqlite).

We need to backup the database to SD memory, but we are having problems exporting the sqlite file from phonegap to SD.

Can anybody help us?

+6
source share
3 answers

Sounds good with Cordova 3.5 and org.apache.cordova.file 1.2.1

Some variations are needed for differents paths.

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" ) } 
+1
source

A few years later, I know, but it works for me on Cordova 5.4.1 and works on Android (I think iOS also uses cordova.file.application, but I haven't tested it 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); }); }); }; 
+1
source

A long 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); } 
0
source

Source: https://habr.com/ru/post/921287/


All Articles