2016-09-07 4 views
1

日付範囲に基づいてデータベースから合計値を取得する必要があります。私はSpringのjdbcTemplateを次のように使ってみました。しかし、何も返さない。SpringのjdbcTemplateクエリは、データベースのデータに関係なく常にnullを返します

public void getTotal(String from, string toDate){ 
    String totalSql="select sum(b.finalAmount) as total from example a, example b "+ 
       "where a.created >= TO_TIMESTAMP(:fromDate, 'MM-DD-YYYY') AND a.created < TO_TIMESTAMP(:toDate, 'MM-DD-YYYY hh24:mi:ss') "+ 
       "and a.tradein_id=b.tradein_id"; 

    List<Integer> checkAmt = jdbcTemplate.query(sql, new RowMapper<Integer>() { 

     @Override 
     public Integer mapRow(ResultSet rs, int rowNum) throws SQLException 
     { 
      int check = rs.getInt("TOTAL"); 
      return check; 

     } 
    }, fromDate,toDate); 


    int checkAmount = jdbcTemplate.queryForObject(
      totalSql, new Object[]{fromDate, toDate},Integer.class); 
} 

私がfromDateとtoDateをハードコードすると、うまく動作します。

dateとtodateの両方は、フォーマットのフロントエンドの文字列値です。08/09/2016。

+0

私は説明を更新しました。romDateとtoDateはフロントエンドからString形式です。例:09/07/2016 – sanvica

答えて

2

SQLは名前付きパラメータを使用していますが、コードは引数リストを送信しています。 NamedParameterJdbcTemplateを使用して引数を渡す方法を変更するか、JdbcTemplateを使用して、名前付き引数の代わりに?プレースホルダを使用するようにSQLを変更します。

NamedParameterJdbcTemplateを使用する場合は、SQLで名前でパラメータを参照する必要があり、引数を渡すときに名前を指定する必要があります。

public int countOfActorsByFirstName(String firstName) { 

    String sql = "select count(*) from T_ACTOR where first_name = :first_name"; 

    SqlParameterSource namedParameters = new MapSqlParameterSource("first_name", firstName); 

    return this.namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Integer.class); 
} 

別の方法としては、このような引数を提供することができます::(the spring-jdbc documentationから)このように、マップにそれらを入れて、あなたが名前付きパラメータを使用する必要はありませない場合

Map args = new HashMap(); 
args.put("fromDate", fromDate); 
args.put("toDate", toDate); 
jdbcTemplate.queryForObject(sql, args, Integer.class); 

を変更SQLは次のようになります。

String totalSql= "select sum(b.finalAmount) as total from example a, example b "+ 
"where a.created >= TO_TIMESTAMP(?, 'MM-DD-YYYY') AND a.created < TO_TIMESTAMP(?, 'MM-DD-YYYY hh24:mi:ss') "+ 
"and a.tradein_id=b.tradein_id" 

残りはそのままです。

+0

queryForObjectをSQLParamterSource型エラーで使用することはできません。 – sanvica

+0

@sanvica:NamedParameterJdbcTemplateを使用していないようです。その場合は、指定された引数を?に置き換えることができます。プレースホルダ。 –

関連する問題