2012-07-25 17 views
6

Abbiamo un'app che utilizza cordova (PhoneGap) e il suo DB sqlite (voglio dire, non abbiamo installato un sqlite esterno).Esporta sqlite db nell'app phoneseg

Abbiamo bisogno di fare il backup del DB nella memoria SD ma abbiamo problemi ad esportare il file sqlite da PhoneGap a SD.

Qualcuno può aiutarci?

+0

Dovrai essere molto più specifico nelle tue domande. Che cosa hai provato? – NuSkooler

+0

Anche io sto cercando lo stesso. Hai trovato la soluzione? –

risposta

0

Molti tempo fa ... ma penso che questa era la soluzione:

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

Signore, possiamo copiare il file db su sdcard o possiamo salvarlo sul server, se perdiamo il nostro telefono, allora l'utente chiederà di ripristinare il file db da un altro dispositivo, poi lo ripristineremo nello stesso file giusto .. Ma sto provando questo un paio di giorni non si ottiene alcuna soluzione di lavoro .. puoi verificarlo questo – user3107283

1

Questo suona bene con Cordova 3.5 e 1.2.1 org.apache.cordova.file

Alcune varianti necessarie per percorso diverso.

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

Signore possiamo copiare il file db in sdcard o possiamo salvarlo sul server, se perdiamo il nostro telefono allora l'utente chiederà il ripristino del file db da altro dispositivo, poi dobbiamo ripristinarlo nello stesso file giusto .. Ma sto provando questo paio di giorni non trovando alcuna soluzione funzionante .. puoi verificarlo questo – user3107283

1

Un paio di anni di ritardo, lo so, ma questo sta lavorando per me su Cordova 5.4.1 e in esecuzione su Android (credo iOS utilizza cordova.file.application troppo, ma non ho ancora testato):

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

Signore possiamo copiare il file db in sdcard o possiamo salvarlo sul server , se perdiamo il nostro telefono, l'utente chiederà di ripristinare il file db da un altro dispositivo, quindi di ripristinarlo nello stesso file giusto .. Ma sto provando questo paio di giorni per non trovare alcuna soluzione funzionante .. puoi verificarlo? Questo? Aiutatemi se lo sapete – user3107283

Problemi correlati