2012-07-25 76 views
6

我們有一個應用程序使用cordova(phonegap)和他自己的sqlite數據庫(我的意思是我們沒有安裝外部sqlite)。在phonegap應用程序中導出sqlite數據庫

我們需要將數據庫備份到SD內存中,但我們在將sqlite文件從phonegap導出到SD時遇到問題。

有人可以幫助我們嗎?

+0

你將不得不在你的問題中更具體。你有什麼嘗試? – NuSkooler 2013-01-28 16:42:29

+0

我也在尋找相同的。你找到解決方案嗎? – 2013-05-20 10:18:47

回答

0

很多很久以前...但我認爲這是解決辦法:

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

先生,我們可以將數據庫文件複製到SD卡,或者我們可以將它存儲到服務器,如果我們丟失了我們的電話,那麼用戶會問從其他設備恢復數據庫文件,然後我們將其恢復到相同的文件權利..但我想這個幾天沒有得到任何工作解決方案..你可以請看看這個 – user3107283 2016-03-18 12:04:19

1

這聽起來不錯,與科爾多瓦3.5和1.2.1 org.apache.cordova.file

需要一些變化不同的路徑。

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

先生,我們可以複製db文件到SD卡,或者我們可以將它存儲到服務器,如果我們丟失了我們的電話,然後用戶會問從其他設備恢復DB文件,然後我們恢復到同一個文件..但我想這兩天沒有得到任何工作解決方案..你可以請檢查出這 – user3107283 2016-03-18 12:04:33

1

幾年晚了,我知道,但是這是爲我工作的科爾多瓦5.4.1和Android上運行的(我認爲iOS的使用cordova.file.application太多,但我還沒有測試):

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

先生,我們可以複製db文件到SD卡,或者我們可以將它存儲到服務器,如果我們失去了我們的電話,那麼用戶會問從其他設備恢復數據庫文件,然後我們將其恢復到同一個文件的權利..但我想這幾天沒有得到任何工作解決方案..你可以檢查出來這個?如果你知道,請幫助我 – user3107283 2016-03-18 12:03:57

相關問題