Created
September 23, 2015 14:39
-
-
Save ahnerd/d6df5250f71b81788d4b to your computer and use it in GitHub Desktop.
JavaScript and jQuery based backup and restore mechanism in JSON format.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// change to your database | |
var db = window.openDatabase("YourApp", "1.0.0", "DatabaseName", 5*1024); // 5*1024 is size in bytes | |
// file fail function | |
function failFile(error) { | |
console.log("PhoneGap Plugin: FileSystem: Message: file does not exists, isn't writeable or isn't readable. Error code: " + error.code); | |
alert('No backup is found, or backup is corrupt.'); | |
} | |
// start backup (trigger this function with a button or a page load or something) | |
function startBackup() { | |
navigator.notification.confirm('Do you want to start the backup? This will wipe your current backup. This action cannot be undone.', onConfirmBackup, 'Backup', 'Start,Cancel'); | |
} | |
// backup confirmed | |
function onConfirmBackup(button) { | |
if(button==1) { | |
backupContent(); | |
} | |
} | |
// backup content | |
function backupContent() { | |
db.transaction( | |
function(transaction) { | |
transaction.executeSql( | |
// change this according to your table name | |
'SELECT * FROM yourTable;', null, | |
function (transaction, result) { | |
if (result.rows.length > 0) { | |
var tag = '{"items":['; | |
for (var i=0; i < result.rows.length; i++) { | |
var row = result.rows.item(i); | |
// expand and change this according to your table attributes | |
tag = tag + '{"attribute1":"' + row.attribute1 + '","attribute2":"' + row.attribute2 + '","attribute3":"' + row.attribute3 + '"}'; | |
if (i+1 < result.rows.length) { | |
tag = tag + ','; | |
} | |
} | |
tag = tag + ']}'; | |
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem) { | |
// Change the place where your backup will be written | |
fileSystem.root.getFile("backup.txt", {create: true, exclusive: false}, function(fileEntry) { | |
fileEntry.createWriter(function(writer) { | |
writer.write(tag); | |
}, failFile); | |
}, failFile); | |
}, failFile); | |
alert("Backup done."); | |
} else { | |
alert("No content to backup."); | |
} | |
}, | |
errorHandlerSqlTransaction | |
); | |
} | |
); | |
} | |
// start restore (trigger this function with a button or a page load or something) | |
function startRestore() { | |
navigator.notification.confirm('Do you want to start the restore? This will wipe your current data. This action cannot be undone.', onConfirmRestore, 'Restore', 'Start,Cancel'); | |
} | |
// restore confirmed | |
function onConfirmRestore(button) { | |
if(button==1) { | |
restoreContent(); | |
} | |
} | |
// restore content | |
function restoreContent() { | |
db.transaction( | |
function(transaction) { | |
transaction.executeSql( | |
// change this according to your table name | |
'DELETE FROM yourTable', startRestoreContent() | |
); | |
}); | |
} | |
// actually start restore content | |
function startRestoreContent() { | |
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem) { | |
// Change the place where your backup is placed | |
fileSystem.root.getFile("backup.txt", null, function(fileEntry) { | |
fileEntry.file(function(file) { | |
var reader = new FileReader(); | |
reader.onloadend = function(evt) { | |
var data = JSON.parse(evt.target.result); | |
var items = data.items; | |
count = items.length; | |
db.transaction( | |
function(transaction) { | |
$.each(items, function(index, item) { | |
transaction.executeSql( | |
// change and expand this according to your table name and attributes | |
'INSERT INTO yourTable (attribute1, attribute2, attribute3) VALUES (?, ?, ?)', | |
[item.attribute1, item.attribute2, item.attribute3], | |
null | |
); | |
}); | |
}); | |
}; | |
reader.readAsText(file); | |
alert("Restore done."); | |
}, failFile); | |
}, failFile); | |
}, failFile); | |
} | |
// database sql transaction error message | |
function errorHandlerSqlTransaction(error) { | |
console.error('SQLite - Error code: ' + error.code + ' - Error message: ' + error.message); | |
return true; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment