我正在尝试升级应用程序中的数据库。我使用 QtQuick.LocalStorage 2.0。
当我调用它时db.changeVersion
它可以工作,但db.version
直到应用程序重新启动才会改变。
db.changeVersion(db.version, "2", function(tx){...}); // Update database to version 2
console.log(db.version); //Should return "2", instead returns previous version of database
如何db.version
在不重启应用程序的情况下获得新功能?
答案1
我解决了编写此功能的问题,该功能允许从任何版本的 DB 升级到最新版本而没有问题。
/* We need this function because db.version is in the .ini file, that is update only by Javascript Garbage Collection.
* So, we have to upgrade from actual version to the last version using only once db.changeVersion.
* To avoid to have a lot of switch and spaghetti-code, this function allow to add new db version without modify old sql
*
* IMPORTANT: NUMBER OF VERSION HAVE TO BE INT (e.g. 0.1, not 0.1.1)
*/
function upgradeDB() {
// This is the array with all the sql code, insert your update at the last
var sqlcode = [
'CREATE TABLE IF NOT EXISTS Calculations(id INTEGER PRIMARY KEY, calc TEXT)',
'ALTER TABLE Calculations ADD insertDate INTEGER NOT NULL DEFAULT 0'
]
// This is the last version of the DB, remember to update when you insert a new version
var lastVersion = "0.2";
// Hack for change old numeration with new one
if (db.version == "0.1.1") {
db.changeVersion("0.1.1", "0.2");
console.log("Fixed DB!");
}
// So, let's start the version change...
db.changeVersion(db.version, lastVersion,
function(tx) {
if (db.version < 0.1) {
tx.executeSql(sqlcode[0]);
console.log('Database upgraded to 0.1');
}
if (db.version < 0.2) {
tx.executeSql(sqlcode[1]);
console.log('Database upgraded to 0.2');
}
/* This is the structure of the update:
* n is the number of version that sql update to
* m is the number of the sql element in the array. Remember that the number of the first element of array is 0 ;)
if (db.version < n) {
tx.executeSql(sqlcode[m]);
console.log('Database upgraded to n');
}
*/
}); // Finish db.changeVersion
}