【问题标题】:Can I use a NamedJdbcTemplate for this use case?我可以在这个用例中使用 NamedJdbcTemplate 吗?
【发布时间】:2020-10-22 21:36:32
【问题描述】:

我创建了一个名为 calculate 的方法,它使用带有 select count* 的查询,如果 count 等于 90,则返回一个布尔值。

  1. 我可以将namedJdbcTemplate.update 调用包装在if 语句中以检查count 的值,如下所示?
  2. 我收到错误消息,指出我无法在 namedJdbcTemplate 上使用更新方法:
Method executeUpdate cannot be used for query. ERRORCODE=-4476, SQLSTATE=null; nested exception is com.ibm.db2.jcc.am.SqlException: [jcc][10104][10942][4.14.113] Method executeUpdate cannot be used for query. ERRORCODE=-4476, SQLSTATE=null

有没有更好的方法来检查查询是否像这样返回 90? :

if(namedJdbcTemplate.update(CALCULATE_QUERY, paramMap) == 90)

  private NamedParameterJdbcTemplate namedJdbcTemplate;

public Assessment process(Assessment assessment) throws Exception {
        if (calculate(assessment) == true){
            return assessment;
        }else{
            return null;
        }
}
    

    public boolean calculate(Assessment assessment){
        final String CALCULATE_QUERY ="SELECT COUNT(*) FROM " +
                "(SELECT BAL_AS_OF_DT FROM MYTABLE " +
                "WHERE CUST_UID = :customerId )";

        Map<String, Object> paramMap = new HashMap<String, Object>();
        paramMap.put("customerId", assessment.getCustUid());
        try{
      
            if(namedJdbcTemplate.update(CALCULATE_QUERY, paramMap) == 90){
                return true;
            }
        }catch (Exception e){
            log.error(e.toString());
        }
        return false;
    }

【问题讨论】:

    标签: java sql jdbc


    【解决方案1】:

    更改您的查询以返回布尔值,如下所示:

    final String CALCULATE_QUERY ="SELECT COUNT(*) = 90 FROM MYTABLE WHERE CUST_UID = :customerId )";
    

    那么你可以使用queryForObject方法:

    return namedJdbcTemplate.queryForObject(CALCULATE_QUERY, paramMap, Boolean.class);
    

    【讨论】:

    • SQL 不喜欢 =90 它会破坏查询
    猜你喜欢
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多