2013-06-25 37 views
1

我的應用程序使用兩個數據庫。爲了處理這些數據庫,我創建了兩個DatabaseHelper類,比如說類X和類Y在Android中使用多個數據庫助手ormLite

我使用各自的getHelper()方法來獲取所需的數據庫幫助程序。

但是,當最初的助手是X,我需要Y,我用這個下面的代碼:

OpenHelperManager.releaseHelper(); 
dbHelper = OpenHelperManager.getHelper(context, Y.class) 

而且我得到以下異常:

java.lang.IllegalStateException: Helper class was class X but is trying to be reset to class Y 

我知道,在OrmLite我們可以使用1個數據庫連接的助手的單個實例,我不認爲我違反了該規則。任何人都可以在這裏幫忙嗎?

+0

如果您查看類_OpenHelperManager_,您會發現getHelper()方法阻止您使用_OrmLiteSqliteOpenHelper_擴展的兩個_DatabaseHelper_類。怎麼會這樣?第一次調用'getHelper()'時,它會調用'innerSetHelperClass()',以便在靜態字段中引用用作第二個參數的_DatabaseHelper_類(您的'Y.class')。所以下次你調用它時,它會檢測你是否試圖調用'getHelper()'傳遞一個不同於你第一次使用的_DatabaseHelper_類的類。 –

+0

對不起,我忘了補充說調用'OpenHelperManager.release()'或'OpenHelperManager.releaseHelper()'不會重置這個靜態字段的值。 'OpenHelperManager.setOpenHelperClass(DifferentHelper.class)'也不會,因爲它也調用'innerSetHelperClass()',這是防止存儲前_DatabaseHelper_類的靜態字段的值一旦被設置就被更改的方法。 –

回答

2

它看起來像你重複使用相同的變量dbHelper爲這兩個類(類X和Y),但類型的dbHelper不是X和Y的父類。我需要看到更多的代碼,但它似乎這個錯誤與ormlite無關。您可以:

  • 使用每幫手一個獨立的變量(你將有一些邏輯反正來決定你要訪問的數據庫)。
  • 爲類X和Y創建一個抽象父類,並將dbHelper的類型更改爲該類。

順便說一句,在這裏你可以看到一個example of using two databases with ormlite for android

+0

看來你發佈的例子工作不正常。當我嘗試打開第二個數據庫並執行'queryForAll()'時,主鍵字段未被檢測到,並且每個對象都使用查詢中下一個字段的值填充其文件。例如,如果我的'MyStoredObject'具有字段A,B和C,並且A是主鍵,那麼當我在第二個幫助器中執行'queryForAll()'時,我得到'MyStoredObjects',其中字段A用B值加載,B是具有C值的loadede,C被設置爲其數據類型的默認值。 –

相關問題