试图在应用程序重新安装时刷新数据库 - 钛合金

时间:2014-07-02 00:08:09

标签: javascript ios titanium titanium-alloy

这是我的代码:

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查询来创建表。

这里的问题是,如果我更新了模型,我将不得不在两个地方更新模式。

如果有人有更好的解决方案,请告诉我,干杯。

0 个答案:

没有答案