【问题标题】:Getting old Dao Object in ormlite在 ormlite 中获取旧的道对象
【发布时间】:2011-10-03 06:51:44
【问题描述】:

我在我的 android 应用程序中将 ormlite 用于 sqlite 数据库。这是一个基于登录的应用程序,我在 SD 卡中有数据库。对于用户 abc,要求是当用户使用不同的用户(如 xyz)登录时,应用程序从服务器对用户进行身份验证,服务器替换用户 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

寻求帮助。

【问题讨论】:

    标签: android ormlite


    【解决方案1】:

    在我看来,你在这里走错了方向。

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

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

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

    祝你好运。

    【讨论】:

    • 对不起哥们。因为我请假了几天,将无法访问网络。无论如何感谢您的回复。最初我无法解决问题所在。问题与 kagii 在此链接 stackoverflow.com/questions/2493331/… 中建议的问题相同,但我仍然面临同样的问题,每件事都很好,但值没有插入表中。我正在使用每个线程建议的单个连接,但是问题依旧。
    • Np。我认为你应该调试它,在插入发生后,使用 adb shell 工具查看数据库:developer.android.com/guide/developing/tools/adb.html Search for Examining sqlite3 Databases from a Remote Shell。
    • 我正在使用 Eclipse,我在 createAndUpdate 方法中调试代码,并且显示受影响的行数与预期相同,但问题是当我在 sqlite 浏览器中打开数据库时数据库仍然是空的
    • 对不起@deepak。我不知道为什么会这样。
    猜你喜欢
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    相关资源
    最近更新 更多