【问题标题】:OrmLite inside an Android ModuleAndroid 模块中的 OrmLite
【发布时间】:2015-11-07 11:48:58
【问题描述】:

我正在尝试将所有 DatabaseRequests 放在 Android 的一个模块中,以便将所有对 DDBB 的访问集中在同一个地方。

我想知道我这样做是否犯了任何错误。这些应用程序以正确的方式运行,但我担心这样做的最佳做法。

我有一个名为 DatabaseRequest 的静态类,所有请求都在其中,例如:

public static void insertUser(Context context, User user) {
    DataBaseHelper mDataBaseHelper = OpenHelperManager.getHelper(context, DataBaseHelper.class);

    try {
        Dao<User, Integer> dao = mDataBaseHelper.getUserDao();
        dao.createOrUpdate(user);

    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        if (mDataBaseHelper != null) {
            OpenHelperManager.releaseHelper();
        }
    }
}

上下文参数是发出请求的活动的上下文。

此代码是否存在任何性能问题?

提前致谢;)

【问题讨论】:

    标签: android ormlite android-database


    【解决方案1】:

    不,正如 Gray(ORMlite 创建者)在这篇文章中所说:

    is it ok to create ORMLite database helper in Application class?

    你的代码最重要的是它保证了一个单一的 数据库助手实例。每个实例都有自己的连接到 数据库和问题发生在多于一 (1) 个时 在程序中打开到数据库的连接。 Sqlite 句柄 多个线程同时使用同一个连接,但它 不能很好地处理多个连接,数据不一致可能 发生。

    在您的情况下,您可能一次有多个连接。

    我可以为您预设我使用 ORMlite 的方法,我有一个单例类 public class DbHelper extends OrmLiteSqliteOpenHelper,它负责创建数据库连接并保存所有 Dao 字段。您将在那里拥有数据库升级代码和其他一些东西,因此请考虑制作外观类。在我的例子中,每个外观都为一个模型类保存一个 Dao 对象,我在其中保留复杂项目检索的逻辑(对于简单的情况,我只是将其委托给 Dao 对象。

    【讨论】:

    • 按照 Gray 的说法,你会发现更适合将所有逻辑放在应用程序类中,正如帖子中解释的那样?
    • 您是否曾明确发布过您的 DBHelper,@Than?还是您只是创建一个与Application 生命周期挂钩的Singleton
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多