使用Spring JdbcTemplate获取List <string>

时间:2016-11-23 11:29:30

标签: java string spring jdbctemplate

我想使用Spring String从数据库中获取JdbcTemplate个对象的列表:

这有效:

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

但是,以下工作均无效:

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));

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

问题是什么?

2 个答案:

答案 0 :(得分:2)

要获得一个列表,你可以尝试这样的事情。

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

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

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

答案 1 :(得分:0)

为什么不尝试使用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;
        }