这是我的代码:
if (!Ti.App.Properties.hasProperty('installed')) {
alert('This is my first run');
//check first installed
Ti.App.Properties.setBool('installed', 1);
//store version number in Ti.App.Properties
Ti.App.Properties.setString('currentVersion', Titanium.App.version);
//import DB from Titanium's Resources directory or one of its descendants, if exist
//create DB
createDB();
}
//check app version
checkAppVersion();
function createDB() {
//createDB
var db = Ti.Database.open('appdb');
alert('db created');
db.close();
}
function checkAppVersion() {
alert(Titanium.App.version);
var curversion = Titanium.App.Properties.getString('currentVersion');
var appversion = Titanium.App.version;
if (curversion != appversion) {
//flush database
alert('flush database');
flushDb();
} else {
//leave existing database
alert('leave database alone!');
}
}
function flushDb() {
// Get database object reference to previous database, if any.
// If it did not exist previously, this will create a new empty db.
var dbOld = Ti.Database.open('appdb');
// Now remove the database, whether it existed before or we just
// created it above. The remove() method requires a database object
// reference, so we had to start by opening it above.
dbOld.remove();
dbOld.close();
// At this point, whether or not there was a previous database it
// is now gone.
//store version number in Ti.App.Properties
Ti.App.Properties.setString('currentVersion', Titanium.App.version);
//create DB
createDB();
}
代码的工作原理如下:
如果新安装的应用程序。创建数据库,设置版本并运行应用程序。然后执行合金模型,一切运行良好。
问题是当我在版本更改后刷新数据库时,我收到一个SQL错误,抱怨我删除它后找不到表。即使我已经重新安装了数据库。
要让它工作,我必须退出应用程序并重新打开它。我不知道为什么会这样,而且我很困难。
更新
为此问题编写了解决方案,但我对此并不满意。
刷新数据库时,我删除了所有表,而不是删除数据库。然后在create DB中,我基本上调用了一个SQL查询来创建表。
这里的问题是,如果我更新了模型,我将不得不在两个地方更新模式。
如果有人有更好的解决方案,请告诉我,干杯。