簡體   English   中英

合金加速器未打開模型數據庫

[英]Alloy appcelerator not opening model database

我有一個在模型中使用sql適配器的android合金應用程序,以及一個顯示數據庫中數據的頁面。 這可行。

但是,我添加了一些代碼來刪除db中唯一表中的所有行,但這不起作用。 我使用SQL而不是delete的模型/主干方法。 沒有錯誤,但是似乎已安裝了新數據庫,並由刪除引用了該數據庫,而不是模型使用的數據庫。

我已經嘗試過使用同步適配器中的相同代碼以及相同的變體,但都無濟於事。 出於調試目的,我將select替換為delete,它返回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應該是數據庫中的表名。 如果使用db_file,則安裝數據庫將使用來自sqlite_master的列名和類型創建表“ collection_name”。 即根本不使用模型的配置中的column_names。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM