2011-12-12 54 views
2

我使用FlashDevelop以調試模式發佈AIR應用程序,並在要發佈的文件/文件夾中包含數據庫。 當應用程序首次啓動時,它會檢查applicationStorageDirectory中是否存在此數據庫的實例,如果沒有,則將其中包含的數據從applicationDirectory複製到applicationStorageDirectory。 這應該意味着引用的數據庫dbFile = File.applicationStorageDirectory.resolvePath(DB_FILE_NAME);現在應該是可寫的,但是當我運行應用程序時,我可以從表中讀取記錄,但是當我嘗試使用SQL語句寫入時,出現SQLError錯誤:錯誤#3122:嘗試寫一個只讀數據庫'。我無法寫入我的AIR應用程序中的SQLLite數據庫

我知道如果我試圖寫入applicationDirectory的只讀位置時會拋出,但我肯定使用File.applicationStorageDirectory位置,應該(據我所知)是可寫的。我使用dbFile.nativePath屬性找到了我的Windows 7,64位上的數據庫位置:C:\ Users \ sean.duffy \ AppData \ Roaming \ FishFightAppData \ Local Store \ db我應該能夠更新數據庫。

任何人有任何想法?我已經嘗試了所有我能想到的,找遍了,但唯一的常見原因似乎是,當人們試圖寫入asplicationDirectory,而不是存儲目錄....

更新::

我的壞 - 剛剛意識到我誤解了我正在使用的第三方庫的API!我應該一直在調用executeModify(語句),它可以修改數據庫的內容,而不是我調用不會/不能覆蓋數據庫的execute(語句)。

源代碼被編譯成一個SWC,並沒有文件指出你需要使用executeModify,儘管我應該從我想的名字中猜出來!

對此深感抱歉,並感謝您的幫助

+0

打開UAC,看看你是否可以從「unlevated」命令提示符窗口重命名你的db文件。 (例如:不以管理員身份運行)。與它的位置,它應該能夠proform這個任務。但如果它不能,它會顯示爲什麼空氣應用程序不能觸摸它。另外,「DB_FILE_NAME」中存儲了什麼?它是反斜槓還是正斜槓?如果返回,它將需要2個反斜槓。 – WORMSS

+0

是的,它可以從cmd提示符(非管理員權限)重命名文件,我也正在使用DB_FILE_NAME的正斜槓:String =「db/fishfight.db」;有沒有辦法將db的內部內容設置爲只讀?我使用名爲Lita的免費AIR應用創建了它,但是我看不到任何設置(您可以對其進行加密和密碼保護,但對讀/寫權限沒有任何設置 – Sean

回答

1

(作爲一個公衆禮節不了這一關沒有答案的列表,我重新張貼了明顯的解決方案。像往常一樣,提問者是更受歡迎忽略礦和後它自己並接受他們自己的回答。)

在此API中,您需要致電executeModify(statement)而不是execute(statement)。後者不會覆蓋數據庫。

相關問題