2011-10-03 54 views
0

我在我的android應用程序中使用ormlite for sqlite數據庫。這是一個基於登錄的應用程序,我有SD卡中的數據庫。對於用戶abc,要求是用戶使用xyz等不同用戶登錄,然後應用程序從服務器驗證用戶,服務器將用戶xyz的db替換爲db。但是,當我試圖訪問登錄憑證時,它會在數據庫反映新憑證時給出舊憑證。在ormlite中獲取舊的Dao對象

我也試過:

DaoManager.clearCache(); 

這是不是也工作我想:

DatabaseManager<DatabaseHelper> manager = new DatabaseManager<DatabaseHelper>(); 
manager.releaseHelper(DatabaseHelperGenerator.getDataBaseHelperInstance()) 

在此之後,當我試圖觸發此查詢:

Dao<LoginAuthentication, Integer> loginAuthenticationDao = null; 
DatabaseHelperGenerator.getDataBaseHelperInstance(). 
    clearLoginDao(LoginAuthentication.class); 
loginAuthenticationDao = DatabaseHelperGenerator.getDataBaseHelperInstance(). 
    getUserDao(LoginAuthentication.class); 
List<LoginAuthentication> loginAuthenticationList = 
    loginAuthenticationDao.queryForAll(); 

這是給IllegalStateException :Database not open

尋求幫助。

回答

1

在我看來,你在這裏走錯了方向。

  • 您假定DAO爲您緩存對象,但除非您在特定的DAO上啓用了對象緩存,否則情況並非如此。
  • DaoManager.clearCache()不清除對象緩存,而是清除緩存的DAO對象。
  • 一旦釋放助手,數據庫連接就會關閉,這就是您得到IllegalStateException的原因。

我會做一些調試你的應用程序或一些值的日誌記錄,看看問題出在哪裏。這裏有一些想法:

  • 如果您使用的是對象緩存,您是否嘗試禁用它?您是否嘗試通過調用Dao.clearObjectCache()來刷新對象緩存?同樣,只有打開了緩存,緩存纔會存在。它默認情況下不是。
  • 你用什麼代碼來保存登錄信息?任何不同於其他呼叫?
  • 如何使用Dao.queryRaw()方法在插入後立即轉儲數據庫?
  • 任何交易?

祝你好運。

+0

對不起哥們。因爲我在休假幾天,將無法訪問網絡。任何方式感謝您的答覆。最初我無法弄清楚問題所在。問題是相同的,在這個鏈接中的kagii建議http://stackoverflow.com/questions/2493331/what-is-best-practice-with-sqlite-and-android但仍面臨同樣的問題,每一件事進行得很好,但值不插入表中。我使用每個線程建議的單個連接,但問題仍然相同。 –

+0

Np。我認爲你應該調試它,並且在插入發生後,使用adb shell工具來查看數據庫:http://developer.android.com/guide/developing/tools/adb.html搜索檢查sqlite3數據庫遠程外殼。 – Gray

+0

我使用eclipse,我調試它在createAndUpdate方法中的代碼,並且還顯示受影響的行號與預期的相同,但問題是當我在sqlite瀏覽器中打開數據庫時db仍然爲空 –