2016-11-15 63 views
0

下面的方法当前使用特定的参数和限制来查询数据库,并且当查询完成时,它将再次查询具有这些特定参数的数据库,只用一个COUNT(*)返回查询的全部可能结果。如何运行查询并返回计数

例如:

SELECT c1, c2 FROM table WHERE c1 = 'something' 
SELECT count(*) FROM table WHERE c1 = 'something' 

我想要做的是在同一时间运行这两个查询,然后将结果汇集成一个对象,象下面这样:

class SomethingResult { 
    public List<T> data; 
    public Long count; 
} 

RxJava如何解决这个问题?

此外,RxJava是否适合此解决方案?

回答

0

RxJava对于这种情况非常有用。在你的DB类:

//We'll use Single. Unlike Observable it returns only one value and then completes. 
public Single<SomethingResult> getSomethingResultFromDb(Object params) { 
    //we will use zip() operator to combine query results 
    return Single.zip(
      doFirstQuery(params), 
      doSecondQuery(params), 
      (firstQueryResult, secondQueryResult) -> { 
       //combine results into new SomethingResult 
       return Single.just(somethingResult); 
      }); 
} 

private Single<List> doFirstQuery(Object params) { 
    return Single.fromCallable(() -> { //or Single.defer() 
     //your first db query with params 
     return firstQueryResult; 
    }); 
} 

private Single<Long> doSecondQuery(Object params) { 
    return Single.fromCallable(() -> { //or Single.defer() 
     //your second db query with params 
     return secondQueryResult; 
    }); 
} 

,并调用它像这样

YourDbObject.getSomethingResultFromDb(params) 
    //apply schedulers with subscribeOn() and observeOn() operators 
    .subscribe(somethingResult -> { 
     //handle result 
    }, error -> { 
     //handle error 
    }); 
+0

这一工程!谢谢!!! – spcoder