как предотвратить перезапись базы данных Air для Android SQLite?

Я создаю sqlite db в своем приложении air для Android внутри следующей функции:

protected function createDatabase():void{

        _sqlConnection = new SQLConnection();
        _sqlConnection.addEventListener(SQLEvent.OPEN, openHandler); 
        _sqlConnection.addEventListener(SQLErrorEvent.ERROR, errorHandler); 

        var _sqlFolder:File = File.applicationStorageDirectory; 
        var _sqlFile:File = _sqlFolder.resolvePath("RouteLog.db");          

        _sqlConnection.open(_sqlFile); 
}

я могу успешно создавать таблицы, вставлять и выбирать, но каждый раз, когда я повторно публикую приложение из flash cs5.5, база данных перезаписывается и все данные теряются. Полный тупик, любые идеи приветствуются!

Ваше здоровье

[редактировать]

Итак, я публикую отладочную версию непосредственно из flash pro через usb. Когда приложение инициализируется, оно вызывает описанный выше метод, при получении события OPEN оно создает таблицу, используя следующую инструкцию SQL.

var SQL:String =            
            "CREATE TABLE IF NOT EXISTS myRoutes (" +
            "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
            "name STRING, " + 
            "created DATE, " + 
            "duration NUMBER, " + 
            "waypoints OBJECT, " + 
            "avgSpeed NUMBER, " +
            "distance NUMBER, " +
            "rating NUMBER" + ")";

Затем я могу запустить некоторые операции, вставить, выбрать и т. д., и все будет, как и ожидалось. Если я выйду и повторно запущу приложение, предыдущие наборы данных останутся нетронутыми, но когда я повторно опубликую из флэш-памяти, все данные, сохраненные в предыдущем выпуске, исчезнут.

Согласно документации SQLConnection.open() откроет соединение с файлом, указанным в параметрах, и, если он не существует, создаст его...


person Geoff Liddiard    schedule 14.02.2012    source источник
comment
Больше кода, вероятно, даст вам ответ, поскольку вы даже не показываете, как вы получаете доступ/назначаете данные.   -  person The_asMan    schedule 15.02.2012
comment
Это действительно не имеет значения. Он говорит, что фактический файл перезаписывается в applicationStorageDirector приложения.   -  person Aaron    schedule 15.02.2012


Ответы (2)


Согласно справочнику AS3 для flash.filesystem.File:

Когда вы удаляете приложение AIR, удаление каталога хранилища приложения и его файлов зависит от платформы.

Таким образом, вы можете столкнуться с этой проблемой, если вручную удаляете приложение, а затем снова загружаете его на устройство. Более подробная информация о шагах поможет, поскольку у меня определенно были данные, сохраняющиеся между публикациями приложения на устройстве Android (хотя я использовал Flash Builder).

person Aaron    schedule 15.02.2012

После дальнейших исследований на форумах Adobe я думаю, что ответ заключается в том, что вы не можете предотвратить перезапись файлов, хранящихся в applicationStorageDirectory, при повторной публикации из Flash Pro.

Приложение, которое я создаю, использует геолокацию в качестве основной функции, поэтому мне нужен реальный набор данных для работы. В конце концов решение, которое сработало для меня, заключалось в том, чтобы скопировать базу данных из applicationStorageDirectory в documentDirectory (sd-карту), пока я все еще разрабатываю приложение (удалю это, если оно когда-либо выйдет на рынок).

person Geoff Liddiard    schedule 16.02.2012