使用 Spring JdbcTemplate 获取列表<String>

Getting List<String> using Spring JdbcTemplate

我想使用 Spring JdbcTemplate:

从数据库中获取 String 个对象的列表

这个有效:

List<String> myList = this.logJdbcTemplate.query(this.dbQuery, new Object[] {this.someKey}, new RowMapper() {
    public Object mapRow(ResultSet resultSet, int i) throws SQLException {
        return resultSet.getString(1);
    }
});

myList 包含从数据库返回的 Strings

然而,none以下工作:

List<String> myList = this.logJdbcTemplate.query(this.dbQuery, new Object[] {this.someKey}, new BeanPropertyRowMapper(String.class));

List<String> myList = this.logJdbcTemplate.query(this.dbQuery, new Object[] {this.someKey}, new BeanPropertyRowMapper<String>(String.class));

List<String> myList = (List<String>)this.logJdbcTemplate.query(this.dbQuery, new Object[] {this.someKey}, new BeanPropertyRowMapper<String>(String.class));

奇怪的是,当我在上述语句后打印规则列表的size时,返回的size是4,这是从数据库返回的Strings的数量。但是,在调试期间检查时,列表中的所有元素都是空白的。

有什么问题?

要获得列表,您可以尝试这样的操作。

List<String> data= logJdbcTemplate.queryForList(query,String.class)

使用 BeanPropertyRowMapper 的代码无法正常工作的原因可能是(这是一个合乎逻辑的猜测)当您提供一个 bean(比如 User.class)时,Spring 必须初始化class(可能使用反射),然后使用数据库提供的 ResultSet 中的 column_name 映射所有字段。

但是在 String.class 的情况下,它无法找到任何映射到您的 ResultSet 的字段。但它已经创建了对象,这就是为什么它是 return 4 个空白对象。

你为什么不尝试使用 ResultSet 而不是这个 BeanPropertyRowMapper :

new ResultSetExtractor<List<String>>() {
        @Override
        public List<String> extractData(ResultSet rs) throws SQLException, DataAccessException {
            List<String> result = new ArrayList<String>();
            while (rs.next()) {
               String myString = rs.getString("name_of_the_coulmn");
               //do whatever logic with the string : check if it is null or empty ...           
               result.add(myString);
            }
            return result;
        }