2012-02-14 93 views
1

進出口創造了我的空氣下面的函數內的sqlite的分貝Android應用:如何防止Air for android 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); 
} 

我可以成功地創建表,插入和選擇,但每一次我從閃存CS5.5的重新發布應用程序數據庫被覆蓋並且所有數據都丟失。完全難住,歡迎任何想法!

乾杯

[編輯]

所以,我通過USB發佈調試直接從Flash Pro中釋放。當應用程序被初始化它調用上述方法,使用下面的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" + ")"; 

然後我可以運行一些操作,插入,選擇等,並如預期的一切接受它創建一個表的OPEN事件。如果我退出並重新播放應用程序,則以前的數據集完好無損,但是當我從閃存重新發布時,以前版本中存儲的任何數據都消失了。

根據文檔SQLConnection.open()將打開在參數提供的文件的連接,如果它不存在,它會創建一個...

+0

更多的代碼可能會給你一個答案,因爲你甚至沒有顯示你如何訪問/分配數據。 – 2012-02-15 00:41:11

+0

這並不重要。他說實際的文件被覆蓋在應用程序的applicationStorageDirector中。 – Aaron 2012-02-15 02:46:04

回答

0

經過對adobe論壇的進一步研究,我認爲答案是,您無法防止從Flash Pro重新發布時,存儲在applicationStorageDirectory中的文件被覆蓋。

應用程序構建使用地理定位作爲核心功能,所以我需要一個真正的數據集來處理。最終解決方案爲我工作,是將數據庫從applicationStorageDirectory複製到documentsDirectory(sd卡),同時我仍在開發該應用程序(如果它已上市,將會刪除該應用程序)。

0

根據閃光的AS3參考.filesystem.File:

當您卸載AIR應用程序時,卸載程序是否刪除應用程序存儲目錄及其文件取決於平臺。

因此,如果您手動卸載應用程序然後再次將其推送到設備,您可能會遇到該問題。有關這些步驟的更多詳細信息將有所幫助,因爲我肯定應用程序發佈到Android設備之間的數據一直存在(儘管我使用的是Flash Builder)。