我想使用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
的数量。但是,在调试期间检查时,列表包含所有空白元素。
问题是什么?
答案 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;
}