我使用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中为integer[]
。但是,当我尝试这样做时,它会抛出一个错误:
int psql异常类型的错误值
我也尝试过:
List<List<Integer>> ListOfitems=jdbcTemp.queryForList(SQL , Integer.class);
但它仍然会引发同样的异常。
感谢任何帮助。
答案 0 :(得分:1)
要获取单行的数组字段,它应该是:
import java.sql.Array;
...
final String sqlQuery = "...";
final Array itemListArray = jdbcTemplate.queryForObject(sqlQuery, Array.class);
请注意,方法调用可能会抛出异常:
IncorrectResultSizeDataAccessException
- 如果查询没有返回一行,或者没有返回该行中的一列
答案 1 :(得分:1)
您可以使用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;
}
// ...
}
答案 2 :(得分:0)
经过大量的反复试验后,这就成了伎俩。
List<Array> ListOfitems=jdbcTemp.queryForList(SQL , java.sql.Array.class);
所以基本上postgres数组等于java sql数组类型。希望它可以帮助任何人:)