使用 Spring JdbcTemplate 获取 List<String>

Vic*_*cky 2 java string spring jdbctemplate

我想String使用 Spring 从数据库中获取对象列表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);
    }
});
Run Code Online (Sandbox Code Playgroud)

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));
Run Code Online (Sandbox Code Playgroud)

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

有什么问题?

Dav*_*jan 6

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

List<String> data= logJdbcTemplate.queryForList(query,String.class)
Run Code Online (Sandbox Code Playgroud)

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

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