我上个月在博客上写过这个问题 (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;
}