Alloy appcelerator 未打开模型数据库

Alloy appcelerator not opening model database

我有一个 android alloy 应用程序,它在模型中使用 sql 适配器,还有一个页面显示数据库中的数据。 这行得通。

但是,我添加了一些代码来删除数据库中唯一 table 中的所有行,但这不起作用。我使用 SQL 而不是 model/backbone 删除方法。 没有错误,但似乎安装了一个新数据库并且被删除引用而不是模型使用的数据库。

我试过使用来自同步适配器的相同代码及其变体,但都无济于事。出于调试目的,我已将删除替换为 select 代码和此 returns 0 行。模型使用的数据库确实包含行。

服务中的代码是运行。该服务也使用该模型,因此我不确定它是否相关。我不知道模型是否使数据库保持打开状态,而我的打开无声地失败,然后创建了一个新数据库。

这是来自同步适配器:

Ti.API.debug('Installing sql database "' + dbFile + '" with name "' + dbName + '"');
var db = Ti.Database.install(dbFile, dbName);

[DEBUG] Installing sql database "/trackit.sqlite" with name "trackit"

所以我尝试了:

        Ti.API.debug('DELETING RECORDS');
        var db = Ti.Database.install("/trackit.sqlite", "trackit");
        // var db = Ti.Database.open('trackit');
        var rs;
        rs = db.execute('SELECT * FROM geo LIMIT 2;');
        Ti.API.debug('ROW COUNT: ' + rs.rowCount);
        while ( rs.isValidRow() ) {
            Ti.API.debug('COOKIE: ' + rs.fieldByName('id'));
            rs.next();
        }
        rs.close();
        db.close();

这导致:

[DEBUG] COLLECTION SIZE: 0
[DEBUG] DELETING RECORDS
[DEBUG] ROW COUNT: 0

这是型号:

exports.definition = {
    config: {
        columns  : {
            "id"    : 'INTEGER PRIMARY KEY AUTOINCREMENT',
            "lon"   : 'TEXT',
            "lat"   : 'TEXT',
            "time_" : 'TEXT',
            "now_"  : 'TEXT',
            "sent"  : 'BOOL'
        },
        defaults : {
            "sent" : 0
        },
        adapter  : {
            "db_file"         : '/trackit.sqlite',
            "type"            : 'sql',
            "collection_name" : 'geos',
            "idAttribute"     : 'id'
        }
    } // config

};

经过一番修改后,发现 collection_name 应该是数据库中的 table 名称。 如果使用 db_file,安装数据库会创建 table "collection_name" 列名和类型来自 sqlite_master。即不使用 column_names 在模型的配置中。