2014-03-26 85 views
1

我正在研究使用WebSQL存儲用戶數據的基於移動HTML的應用程序。作爲WebSQL,DB被本地存儲在移動設備上的客戶端上。該應用程序用於離線環境。如何將WebSQL數據庫導出爲.sql文件? (如mysqldump)

我需要添加一個函數來導出數據,以便當應用程序稍後連接到互聯網時,它可以作爲.sql文件發送回服務器。

這是我第一次使用WebSQL,我正在嘗試做類似於mysqldump的事情。這可能嗎?或者有沒有辦法用WebSQL來模仿這個功能?

回答

1

我上個月寫了一篇關於這個月的文章(http://www.raymondcamden.com/index.cfm/2014/2/24/Creating-a-data-backup-of-a-WebSQL-database),但是由於SO只是在共享解決方案上皺眉,所以我會在這裏發佈一些代碼。 ;)基本前提是:

你要通過每個表。 您選擇*。 您獲取數據行然後將其轉換爲字符串。

這裏是我用來獲取數據的代碼。

function backup(table) { 
var def = new $.Deferred(); 
db.readTransaction(function(tx) { 
    tx.executeSql("select * from "+table, [], function(tx,results) { 
     var data = convertResults(results); 
     console.dir(data); 
     def.resolve(data); 
    }); 
}, dbError); 

return def; 
} 

$(document).on("click", "#doBackupBtn", function(e) { 
e.preventDefault(); 
console.log("Begin backup process"); 

$.when(
    backup("notes"), 
    backup("log") 
).then(function(notes, log) { 
    console.log("All done"); 
    //Convert to JSON 
    var data = {notes:notes, log:log}; 
    var serializedData = JSON.stringify(data); 
    console.log(serializedData); 
}); 

}); 

最後兩行是你要調整的。對我而言,我想要JSON,所以我使用了本機JSON序列化。如果你想要SQL,你需要遍歷數據行並生成INSERT語句。儘管如此,你在服務器端可能會更好。

我忘了加入這個工具。它只是將SQLResultSet對象轉換爲更簡單的數組。

//Generic utility 
function convertResults(resultset) { 
var results = []; 
for(var i=0,len=resultset.rows.length;i<len;i++) { 
    var row = resultset.rows.item(i); 
    var result = {}; 
    for(var key in row) { 
     result[key] = row[key]; 
    } 
    results.push(result); 
} 
return results; 
} 
+0

你能解釋一下你在函數convertResults(results)中做了什麼; 因爲這不是你的代碼? –

+0

對不起 - 它需要SQLResultSet並將其轉換爲簡單對象數組。我會在一秒鐘之內將它添加到我的答案中。 –

1

幾年前,我有一個部分解決方案,現在我已經將它打包成一個自包含的庫。

隨意下載websqldump.js上:

https://github.com/sdesalas/websqldump

有幾個選項存在,但應該應該能夠導出你的數據庫,並張貼到遠程服務器,如下所示:

// Export database and POST to remote server 
websqldump.export({ 
    database: 'NorthwindLite', 
    success: function(sql) { 
    $.ajax({type: 'POST', url: 'http://myserver.com/sync', data: sql}); 
    } 
}); 

希望這會有所幫助!

相關問題