2015-06-02 1 views
0

У меня есть приложение для Android-андроида, которое использует адаптер sql в модели и странице, которая показывает данные в базе данных. Это работает.Сплав appcelerator не открывается модель базы данных

Однако, я добавил код для удаления всех строк в единственной таблице в db, и это не сработает. Я использую SQL вместо метода model/backbone для удаления. Нет ошибки, но кажется, что новая база данных установлена ​​и на нее ссылается удаление, а не база данных, используемая моделью.

Я пробовал использовать тот же код из адаптера синхронизации и варианты того же, все безрезультатно. Для целей отладки я заменил delete на select code, и это возвращает 0 строк. База данных, используемая моделью, содержит строки.

Код работает в сервисе. Служба также использует модель, поэтому я не уверен, насколько она актуальна. Я не знаю, поддерживается ли модель открытой базой данных, а мой open не работает, а затем создает новую базу данных.

Это из синхронизации адаптера:

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 

}; 

ответ

0

После некоторого взлома выяснилось, что имя_пакета должно быть именем таблицы в БД. Если используется db_file, установка базы данных создает таблицу «collection_name» с именами столбцов и типами из sqlite_master. т.е. не использовать имя_колонки в конфигурации модели вообще.