2017-11-24 32 views
0

私は簡単な質問のようですが、それを理解することができず、解決策をオンラインで見つけられませんでした。私がやっているのは、DAOメソッドを使ってユーザーをアカウントの下に置くことです。私はフィルタリングと私のクエリの順序のパラメータが含まれています。関係するテーブルが複数あり、クエリで内部結合、外部結合を使用しています...それほど重要ではありません。重要なのは、制限後であってもクエリが返す行の数を知りたいということです(制限にかかわらず合計)。これは私が私のクエリに追加することができさえも制限した後、私のクエリが返す総行数を確認するために(またはどのようにすると、私は私のJbdcTemplateオブジェクトを利用することができます)。..JdbcTemplateでクエリから返された行数を取得する

 List<User> users = new ArrayList<User>(); 

     UserRowCallbackHandler userHandler = new UserRowCallbackHandler(accountId); 

     String query = null; 

     if (limit == -1) { 
      query = String.format("%s\nORDER BY %s", 
        sqlXml.getQuery("GET_USERS_BY_ACCOUNT_ID"), 
        orderBy); 
     } else { 
      query = String.format("%s\nORDER BY %s \nLIMIT %d, %d\n", 
        sqlXml.getQuery("GET_USERS_BY_ACCOUNT_ID"), 
        orderBy, offset, limit); 
     } 


     getJdbcTemplate().query(
       query, userHandler, 
       accountId, filter); 

     users.addAll(userHandler.getUsers()); 

私のメソッド内のいくつかのコードです??

答えて

0

[OK]を私は私のソリューションに満足していないが、今のところ動作します。答えは3つのクエリを実行しなければならないということです。これは問題ではないと思いますが、1つのクエリのみを実行することが好きでした。

答えは、最初のクエリ(制限なし)を実行し、すぐ後で2番目のクエリ(SELECT FOUND_ROWS())を実行することです。次に、制限を指定して3番目のクエリを実行します。私は、制限が指定されていない場合は、私は2つのクエリを実行する必要があると思うが、私はこれを使用してサーバー側のページネーションを行うので、ほとんど常に制限されます。コードは次のとおりです

 UserRowCallbackHandler userHandler = new UserRowCallbackHandler(accountId); 

     query = String.format("%s\nORDER BY %s", 
       sqlXml.getQuery("GET_USERS_BY_ACCOUNT_ID"), 
       orderBy); 

     queryForTotal = "SELECT FOUND_ROWS()"; 

     getJdbcTemplate().query(
       query, 
       userHandler, accountId, filter); 

     filteredTotal = getJdbcTemplate().queryForInt(queryForTotal); 

     if (limit != -1) { 
      // re-initialize handler for clean data 
      userHandler = new UserRowCallbackHandler(accountId); 

      query = String.format("%s\nORDER BY %s \nLIMIT %d, %d\n", 
        sqlXml.getQuery("GET_USERS_BY_ACCOUNT_ID"), 
        orderBy, offset, limit); 


      getJdbcTemplate().query(
        query, 
        userHandler, accountId, filter); 
     } 
関連する問題