我有一个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
答案 0 :(得分:0)
经过一些黑客攻击后,事实证明collection_name应该是数据库中的表名。 如果使用db_file,则安装数据库会创建表" collection_name" 使用sqlite_master中的列名和类型。即不使用column_names 在模型的配置中。