【问题标题】:Closing database connection with SqlBright使用 SqlBright 关闭数据库连接
【发布时间】:2017-01-26 14:10:00
【问题描述】:

我正在将以下访问 Android 应用的 SQLite 数据库的模式迁移到 RxJava 世界中:

public List<Stuff> doStuff(){
    synchronized (lock) {
        open(); // this effectively checks for isOpen() then calls getWritableDatabase()
        // query the database for stuff
        close(); // SQLiteOpenHelper close method
        return stuffList;
    }
}

我正在苦苦挣扎的是什么时候应该关闭数据库连接?我知道有一些模式根本不关闭连接以及关闭连接作为 Activity 方法的一部分。但是,这些模式需要我将逻辑应用于整个数据库管理器类,如果可能的话,我想避免这种情况。希望可能有一种建议的方法来使用 RxJava 尤其是 SqlBright 包装器来处理这个问题?我的迁移代码如下所示:

public Observable<List<Stuff>> doStuff(){
    synchronized (lock) {
        open();
        String sql = <..>;
        return db.createQuery(tableName, sql, args).mapToList(mStuffMapper);
        // where do I close()?
    }
}

理想情况下,我所追求的解决方案应该允许我更改这一种方法,其余的保持当前的打开/关闭模式。

【问题讨论】:

    标签: android sqlite rx-android sqlbrite


    【解决方案1】:

    您可以使用订阅关闭连接。

    db.createQuery(tableName, sql, args)
            .mapToList(mStuffMapper);
            .doOnSubscribe(new Action0() {
                @Override public void call() {
                    close(); 
                }
            });
    
    Subscription subscribe = doStuff().subscribe();
    subscribe.unsubscribe();
    

    【讨论】:

      猜你喜欢
      • 2011-10-19
      • 2013-10-16
      • 1970-01-01
      • 2014-06-28
      • 2017-07-18
      • 2011-12-29
      • 2016-07-22
      • 1970-01-01
      相关资源
      最近更新 更多