使用 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;
}
我想使用 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;
}