如何从结果映射整数列表

时间:2017-07-31 12:57:24

标签: java spring jdbc

我使用java 7和jdbc模板从postgresql查询整数数组。我的代码如下:

 @Autowired
 private JdbcTemplate jdbcTemp;

 String SQL = "select item_list from public.items where item_id=1";
 List<Integer> ListOfitems=jdbcTemp.queryForList(SQL , Integer.class);

我的item_list列是postgresql.But中的integer [],当我尝试它时会抛出一个错误类型为int psql异常的错误值

感谢任何帮助

2 个答案:

答案 0 :(得分:2)

您可以使用java.sql.Array

如果你只想获得整数数组,你可以试试这个

String SQL = "select item_list from public.items where item_id=1";
Array l = template.queryForObject(SQL, Array.class);
List<Integer> list = Arrays.asList((Integer[]) l.getArray());

或使用RowMapper

Foo foo = template.queryForObject(SQL, new RowMapper<Foo>(){
        @Override
        public Foo mapRow(ResultSet rs, int rowNum) throws SQLException {
            Foo foo = new Foo();
            foo.setName(rs.getString("name"));
            foo.setIntegers(Arrays.asList((Integer[]) rs.getArray("item_list").getArray()));
            return foo;
        }
    });

Class Foo:

class Foo {
    private String name;
    private List<Integer> integers;

    public String getName() {
        return name;
    }
    // ...
}

答案 1 :(得分:1)

queryForList将您作为查询结果获得的每一行保存为List的一个元素。它不会保存到列中的列表并为您返回。

documentation :“结果将映射到结果对象的List(每个一个条目),每个结果对象都匹配指定的元素类型。”

充其量只会返回List<List<Integer>>,但我不确定您是否可以使用List<Interger>.class作为通话参数。