Alloy appcelerator没有打开模型数据库

时间:2015-06-02 00:00:30

标签: android sqlite appcelerator titanium-alloy

我有一个Android合金应用程序,它在模型中使用sql适配器,并在页面中显示数据库中的数据。 这很有效。

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

我尝试使用同步适配器中的相同代码及相同的变体,但都无济于事。出于调试目的,我已将select替换为select代码,并返回0行。模型使用的数据库确实包含行。

代码在服务中运行。该服务也使用该模型,所以我不确定它是否相关。我不知道模型是否保持数据库打开,我的打开是静默失败然后创建一个新的数据库。

这是来自同步适配器:

        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

};

这是模型:

UNIQUE

1 个答案:

答案 0 :(得分:0)

经过一些黑客攻击后,事实证明collection_name应该是数据库中的表名。 如果使用db_file,则安装数据库会创建表" collection_name" 使用sqlite_master中的列名和类型。即不使用column_names 在模型的配置中。