SqlRowSetResultSetExtractor的extractData期望SqlRowSet作为返回类型?

时间:2017-05-30 15:04:04

标签: java spring spring-mvc jdbc spring-boot

我使用以下代码从结果集中提取数据。我收到了编译错误:

  

返回类型与SqlRowSetResultSetExtractor.extractData(ResultSet)不兼容将extractData(...)的返回类型更改为SqlRowSet

package uk.co.company.security.SQL;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.SqlRowSetResultSetExtractor;

import uk.co.company.security.User;

public class UserExtractor extends SqlRowSetResultSetExtractor {
private static final Logger logger = 
LoggerFactory.getLogger(UserExtractor.class);

public Object extractData(ResultSet rs) throws SQLException, DataAccessException {

    return null;
}
}

根据我的研究here,应该没问题。这对我来说也很适合我和spring mvc。我现在将我的代码移动到Spring Boot。没有什么重大变化。想知道它是否与Spring Boot有关或者是否搞砸了我现有的代码。

1 个答案:

答案 0 :(得分:0)

您应该实施SqlRowSetResultSetExtractor,而不是扩展ResultSetExtractor。您应该首先做的是SqlRowSetResultSetExtractor JdbcTemplate用于queryForRowSet方法,不应该进行扩展。

从Spring 3.0开始,ResultSetExtrator是通用的,读取ResultSetExtractor<T>,而SqlRowSetResultSetExtractor会导致ResultSetExtractor<SqlRowSet>,然后当像你一样覆盖方法时,你会得到一个汇编异常为Object!= SqlRowSet

简而言之,就像预期的那样实施ResultSetExtractor

public UserExtractor implements ResultSetExtractor<User> {

    public User extractData(ResultSet rs) throws SQLException, DataAccessException { ... }

}