0

Android アプリケーションで sqlite データベースに ormlite を使用しています。これはログイン ベースのアプリケーションで、SD カードにデータベースがあります。ユーザーabcの場合、xyzなどの別のユーザーでユーザーがログインし、アプリケーションがサーバーからユーザーを認証し、サーバーがユーザーxyzのdbを置き換えることが要件です。しかし、ログイン資格情報にアクセスしようとすると、データベースが新しい資格情報を反映している間に古い資格情報が提供されます。

私も試しました:

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

助けを求めています。

4

1 に答える 1

1

あなたはここで間違った方向に進んでいるように私には思えます。

  • DAO がオブジェクトをキャッシュしていると想定していますが、特定の DAO でオブジェクト キャッシュを有効にしていない限り、そうではありません。
  • DaoManager.clearCache()はオブジェクト キャッシュをクリアしませんが、代わりにキャッシュされた DAO オブジェクトをクリアします。
  • ヘルパーを解放すると、データベース接続が閉じられるため、IllegalStateException.

問題がどこにあるかを確認するために、アプリケーションのデバッグまたは値のログを行います。ここにいくつかの考えがあります:

  • オブジェクト キャッシュを使用している場合、それを無効にしようとしましたか? Dao.clearObjectCache()を呼び出してオブジェクト キャッシュをフラッシュしようとしましたか? 繰り返しますが、キャッシュは有効にした場合にのみ存在します。デフォルトではオンになっていません。
  • ログイン情報を保持するためにどのコードを使用していますか? 他の電話と何か違うの?
  • 挿入直後にDao.queryRaw()メソッドを使用してデータベースをダンプするのはどうですか?
  • 取引はありますか?

幸運を祈ります。

于 2011-10-13T17:43:21.077 に答える