【问题标题】:ResultSetExtractor in jdbcTemplate throwing compilation errorjdbcTemplate中的ResultSetExtractor抛出编译错误
【发布时间】:2014-06-30 10:46:51
【问题描述】:

我正在尝试一个关于如何使用ResultSetExtractor 的演示,但我无法让它工作。

下面是我试过的代码:

public String retrieveDeptName(final int deptId){
    String deptName = (String)jdbcTemplate.update(new PreparedStatementCreator() {

        @Override
        public PreparedStatement createPreparedStatement(Connection con)
                throws SQLException {               
            return con.prepareStatement(SELECT_DEPT);
        }
    }, new PreparedStatementSetter() {          
        @Override
        public void setValues(PreparedStatement ps) throws SQLException {
            ps.setInt(1, deptId);
        }
    },new ResultSetExtractor() {
        @Override
        public Object extractData(ResultSet rs) throws SQLException,
                DataAccessException {               
            if (rs.next()) {
              return rs.getLong(2);
            }               
            return null;
        }
    });

    System.out.println(deptName);
}

错误是:

The method update(String, Object[], int[]) in the type JdbcTemplate is not applicable for the arguments (new PreparedStatementCreator(){}, new PreparedStatementSetter(){}, new ResultSetExtractor(){})

虽然很清楚,但我很惊讶link 是如何工作的?

请指教。

【问题讨论】:

    标签: java spring spring-3 jdbctemplate


    【解决方案1】:

    JdbcTemplate 类型中的方法update(String, Object[], int[]) 不适用于参数(new PreparedStatementCreator(){}, new PreparedStatementSetter(){}, new ResultSetExtractor(){}

    信息很清楚。如果您查看API for JdbcTemplate,您会发现没有没有采用这三种参数类型的update 方法:

    int update(PreparedStatementCreator psc)
    int update(PreparedStatementCreator psc, KeyHolder generatedKeyHolder)
    int update(PreparedStatementCreator psc, PreparedStatementSetter pss)          
    int update(String sql)
    int update(String sql, Object... args)
    int update(String sql, Object[] args, int[] argTypes)
    int update(String sql, PreparedStatementSetter pss) 
    

    虽然很清楚,但我很惊讶link 是如何工作的?

    该示例使用update,它使用query确实具有这些参数的重载。

     T query(PreparedStatementCreator psc, PreparedStatementSetter pss, ResultSetExtractor<T> rse) 
    

    【讨论】:

      【解决方案2】:

      对代码进行重构,使其更具可读性

      您的代码使用update 方法

      String deptName = (String)jdbcTemplate.update(new PreparedStatementCreator() {
      

      你正在做一个查询SELECT_DEPT,更新和选择?它没有任何意义。

      JdbcTemplate 具有 query 方法,它支持或能够使用 ResultSetExtractor

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-09
        • 1970-01-01
        • 2021-07-23
        相关资源
        最近更新 更多