我正在研究使用WebSQL存儲用戶數據的基於移動HTML的應用程序。作爲WebSQL,DB被本地存儲在移動設備上的客戶端上。該應用程序用於離線環境。如何將WebSQL數據庫導出爲.sql文件? (如mysqldump)
我需要添加一個函數來導出數據,以便當應用程序稍後連接到互聯網時,它可以作爲.sql文件發送回服務器。
這是我第一次使用WebSQL,我正在嘗試做類似於mysqldump的事情。這可能嗎?或者有沒有辦法用WebSQL來模仿這個功能?
我正在研究使用WebSQL存儲用戶數據的基於移動HTML的應用程序。作爲WebSQL,DB被本地存儲在移動設備上的客戶端上。該應用程序用於離線環境。如何將WebSQL數據庫導出爲.sql文件? (如mysqldump)
我需要添加一個函數來導出數據,以便當應用程序稍後連接到互聯網時,它可以作爲.sql文件發送回服務器。
這是我第一次使用WebSQL,我正在嘗試做類似於mysqldump的事情。這可能嗎?或者有沒有辦法用WebSQL來模仿這個功能?
我上個月寫了一篇關於這個月的文章(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;
}
幾年前,我有一個部分解決方案,現在我已經將它打包成一個自包含的庫。
隨意下載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});
}
});
希望這會有所幫助!
你能解釋一下你在函數convertResults(results)中做了什麼; 因爲這不是你的代碼? –
對不起 - 它需要SQLResultSet並將其轉換爲簡單對象數組。我會在一秒鐘之內將它添加到我的答案中。 –