2016-11-15 64 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