【问题标题】:extractData of SqlRowSetResultSetExtractor expects SqlRowSet as return type?SqlRowSetResultSetExtractor 的 extractData 期望 SqlRowSet 作为返回类型?
【发布时间】:2017-05-30 15:04:04
【问题描述】:

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

返回类型与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 有任何关系,或者我是否搞砸了我现有的代码。

【问题讨论】:

  • 我怀疑该代码是否有效,因为如错误所述,返回类型不匹配。我怀疑最初您实现了ResultSetExtractor,而不是扩展SqlRowSetResultSetExtractor(这是ResultSetExtractor 的实现)。
  • @M.Deinum 我 100% 确信它按照我在帖子中提到的方式工作。但是,我现在尝试使用ResultSetExtractor 而不是扩展SqlRowSetResultSetExtractor 来实现。除非我得到更好的答案,否则这似乎暂时有效。
  • 您指向的文档也是Spring 2.5的旧版本。如果您使用更新的版本,ResultSetExtractor 实际上是ResultSetExtractor<T>,所以它是通用的,对于SqlRowSetResultSetExtractor 来说是ResultSetExtractor<SqlRowSet>。因此,如果您还升级了 spring,那么它失败是合乎逻辑的。除此之外,虽然它有效,但它不是应该的方式。
  • @M.Deinum 现在说得通了。我现在使用的是 Spring 4.3.7 并且已经使用了this

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


【解决方案1】:

您应该实现ResultSetExtractor,而不是扩展SqlRowSetResultSetExtractor。你应该首先完成的,SqlRowSetResultSetExtractorJdbcTemplate 用于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 { ... }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    相关资源
    最近更新 更多