2012-07-25 12 views
6

Tenemos una aplicación que usa cordova (phonegap) y su propia base de datos sqlite (quiero decir que no instalamos una sqlite externa).Exportar sqlite db en la aplicación phonegap

Necesitamos hacer una copia de seguridad de la base de datos en la memoria SD, pero tenemos problemas para exportar el archivo sqlite de phonegap a SD.

Que alguien nos ayude?

+0

Tendrá que ser mucho más específico en sus preguntas. ¿Qué has intentado? – NuSkooler

+0

También estoy buscando lo mismo. ¿Encontraste una solución? –

Respuesta

0
hace

Muchas veces ... pero creo que esta era la solución:

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

Sir podemos copiar el archivo db en sdcard o podemos almacenarlo en el servidor, si perdimos nuestro teléfono, el usuario le pedirá que restaure el archivo db desde otro dispositivo, luego lo restauraremos en el mismo archivo correcto ... Pero estoy intentando esto Un par de días sin obtener una solución de trabajo. ¿Puedes comprobarlo? – user3107283

1

Esto suena bien con Córdoba 3.5 y 1.2.1 org.apache.cordova.file

Algunas variaciones necesarias para diferentes caminos

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

Señor, podemos copiar el archivo db a sdcard o podemos almacenarlo en el servidor, si perdimos nuestro teléfono, el usuario pedirá restaurar el archivo db desde otro dispositivo, entonces nosotros para restaurarlo en el mismo archivo correcto ... Pero estoy intentando este par de días no obtener ninguna solución de trabajo ... ¿puedes por favor mira esto – user3107283

1

Un par de años de retraso, lo sé, pero esto es trabajo para mí en Cordova 5.4.1 y se ejecuta en Android (creo IOS utiliza cordova.file.application también, pero no he probado todavía):

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

Sir podemos copiar el archivo db en sdcard o podemos almacenarlo en el servidor Si perdimos nuestro teléfono, el usuario pedirá que restauremos el archivo db desde otro dispositivo, y luego lo restauraremos en el mismo archivo. Pero estoy intentando este par de días sin obtener ninguna solución funcional. ¿Puede comprobarlo? ¿esta? Por favor, ayúdame si sabes – user3107283

Cuestiones relacionadas