2016-09-16 14 views
3

ストアドプロシージャを3回呼び出そうとしています。私がコードより下を走ったとき、ストアされたprocへの最後の呼び出しからのデータはresultSet.getRows()の中にしか表示されません。前の2回のストアドプロシージャ呼び出しのデータはresultSetに表示されません。フォローは私のコードです。私は間違ったことをしていますか?誰も助けることができますか?Java用のresultSetでデータが集計されないrxObservable

String currentPeriod = String.format("{call %s.testProc(?)}", params.getJsonObject("databaseInfo").getString("dbName")); 
String priorPeriod = String.format("{call %s.testProc(?)}", params.getJsonObject("databaseInfo").getString("dbName")); 
String todayPeriod = String.format("{call %s.testProc(?)}", params.getJsonObject("databaseInfo").getString("dbName")); 
JsonArray jsonArray = new JsonArray(); 

     database.dbObject().getConnectionObservable().subscribe(
       connection -> { 
        Observable<ResultSet> resultSetObservable = connection.callWithParamsObservable(currentPeriod, new JsonArray().add(params.getString("testParams")),jsonArray).                    
          flatMap(result -> connection.callWithParamsObservable(priorPeriod, new JsonArray().add(params.getString("testParams")), jsonArray). 
          flatMap(result -> connection.callWithParamsObservable(todayPeriod, new JsonArray().add(params.getString("testParams")),jsonArray); 

        resultSetObservable.subscribe(resultSet -> { 
         handler.handle(ReportUtils.parseSQLResult(resultSet.getRows())); 
        },error -> { 
         error.printStackTrace(); 
        },connection::close); 

       },err -> { 
        err.printStackTrace(); 
       } 
     ); 

答えて

1

何が

参考http://reactivex.io/documentation/operators/combinelatest.html

擬似を(それはすべての観測が結果を与えるのを待ちます)すべての観測の結果を与えるcombineLatest演算子を使用することによって達成することができやろうとしていますこのためのコードは、

 String currentPeriod = String.format("{call %s.testProc(?)}", params.getJsonObject("databaseInfo").getString("dbName")); 
     String priorPeriod = String.format("{call %s.testProc(?)}", params.getJsonObject("databaseInfo").getString("dbName")); 
     String todayPeriod = String.format("{call %s.testProc(?)}", params.getJsonObject("databaseInfo").getString("dbName")); 
    JsonArray jsonArray = new JsonArray(); 


    database.dbObject().getConnectionObservable().subscribe(
      connection -> { 
       resultSetObservable = Observable.combineLatest(firstCall, secCall, thirdCall) 
    firstCall = connection.callWithParamsObservable(currentPeriod, new JsonArray().add(params.getString("testParams")),jsonArray) 

     secCall = result -> connection.callWithParamsObservable(priorPeriod, new JsonArray().add(params.getString("testParams")), jsonArray) 

    thirdCall = result -> connection.callWithParamsObservable(todayPeriod, new JsonArray().add(params.getString("testParams")),jsonArray) 
       resultSetObservable.subscribe(firstRes, secRes, thirdRes -> { 
        handler.handle(ReportUtils.parseSQLResult(resultSet.getRows())); 
       },error -> { 
        error.printStackTrace(); 
       },connection::close); 

      },err -> { 
       err.printStackTrace(); 
      } 
    ); 
0

@Bhathath Mgです。私は擬似コードを修正し、それは私のために働いています。

String currentPeriod = String.format("{call %s.test(?)}", params.getJsonObject("databaseInfo").getString("dbName")); 
String priorPeriod = String.format("{call %s.test(?)}", params.getJsonObject("databaseInfo").getString("dbName")); 
String todayPeriod = String.format("{call %s.test(?)}", params.getJsonObject("databaseInfo").getString("dbName")); 


database.dbObject().getConnectionObservable().subscribe(
     connection -> { 

      Observable<ResultSet> firstCall = connection.queryWithParamsObservable(currentPeriod, new JsonArray().add(params.getString("testParams"))); 
      Observable<ResultSet> secondCall = connection.queryWithParamsObservable(priorPeriod, new JsonArray().add(params.getString("testParams"))); 
      Observable<ResultSet> thirdCall = connection.queryWithParamsObservable(todayPeriod, new JsonArray().add(params.getString("testParams"))); 

      Observable.zip(firstCall, secondCall, thirdCall, new Func3<ResultSet, ResultSet, ResultSet, List<JsonObject>>() { 
       @Override 
       public List<JsonObject> call(ResultSet resultSet, ResultSet resultSet2, ResultSet resultSet3) { 
        List<JsonObject> allRecord = new ArrayList<JsonObject>(); 
        allRecord.addAll(resultSet.getRows()); 
        allRecord.addAll(resultSet2.getRows()); 
        allRecord.addAll(resultSet3.getRows()); 
        return allRecord; 
       } 
      }).subscribe(resultSet -> { 
       handler.handle(resultSet); 
      },error -> { 
       error.printStackTrace(); 
      },connection::close); 

     },err -> { 
      err.printStackTrace(); 
     } 
); 
+0

クールです。私の解決策からあなたの答えに来ている場合は、stackoverflowのルールで、あなたは答えとして私を受け入れる必要があります:) –

関連する問題