jdbcTemplate中的ResultSetExtractor抛出编译错误

时间:2014-06-15 00:28:45

标签: java spring spring-3 jdbctemplate

我正在尝试使用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如何运作?

请建议。

2 个答案:

答案 0 :(得分:1)

  

update(String, Object[], int[])类型中的方法JdbcTemplate不适用于参数(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) 

答案 1 :(得分:1)

对代码进行重构,以便更具可读性

您的代码使用update方法

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

你正在进行查询 SELECT_DEPT ,更新并选择?没有任何意义。

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