如何防止Air for android SQLite数据库被覆盖?

时间:2012-02-14 22:08:26

标签: actionscript-3 sqlite air flash-cs5.5 air-android

我在以下函数中为Android app创建了一个sqlite数据库:

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重新发布应用程序时,数据库都会被覆盖,所有数据都会丢失。完全难倒,欢迎任何想法!

干杯

[编辑]

所以,我正在通过usb直接从flash pro发布调试版本。当应用程序初始化时,它调用上面的方法,在接收到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()将打开与参数中提供的文件的连接,如果它不存在,它将创建一个...

2 个答案:

答案 0 :(得分:0)

根据flash.filesystem.File的AS3参考:

  

卸载AIR应用程序时,卸载程序是否删除应用程序存储目录及其文件取决于平台。

因此,如果您手动卸载应用程序然后再将其推送到设备,则可能会遇到此问题。关于这些步骤的更多细节将有所帮助,因为我确实在应用程序发布到Android设备之间存在数据(尽管我使用的是Flash Builder)。

答案 1 :(得分:0)

在对adobe论坛进行进一步研究后,我认为答案是,当从Flash Pro重新发布时,您无法阻止存储在applicationStorageDirectory中的文件被覆盖。

app im building使用Geolocation作为核心功能,因此我需要一个真正的数据集来使用。最终对我有用的解决方案是将数据库从applicationStorageDirectory复制到documentsDirectory(sd卡),同时我还在开发应用程序(如果它进入市场将删除它)。