在ormlite中获取旧的Dao对象

时间:2011-10-03 06:51:44

标签: android ormlite

我在我的android应用程序中使用ormlite for sqlite数据库。这是一个基于登录的应用程序,我在SD卡中有数据库。对于用户abc,要求是用户使用xyz等不同用户登录,然后应用程序从服务器验证用户,服务器将db替换为用户xyz。但是当我尝试访问登录凭据时,它会在数据库反映新凭据时提供旧凭据。

我也尝试过:

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 个答案:

答案 0 :(得分:1)

在我看来,你的方向是错误的。

  • 您假设DAO正在为您缓存对象,但除非您在特定DAO上启用了对象缓存,否则情况并非如此。
  • DaoManager.clearCache()不会清除对象缓存,而是清除缓存的DAO对象。
  • 释放帮助程序后,数据库连接将关闭,这就是您获取IllegalStateException的原因。

我会对您的应用程序进行一些调试或对值进行一些记录,以查看问题所在。以下是一些想法:

  • 如果您使用的是对象缓存,是否尝试禁用它?您是否尝试通过调用Dao.clearObjectCache()来刷新对象缓存?同样,只有在打开缓存后才会存在缓存。它默认不启用。
  • 您使用哪些代码来保留登录信息?有什么不同于其他电话吗?
  • 如何使用Dao.queryRaw()方法在插入后立即转储数据库?
  • 任何交易?

祝你好运。