如何从 simplejdbctemplate 查询中获取字符串列表或类型 T?

Posted

技术标签:

【中文标题】如何从 simplejdbctemplate 查询中获取字符串列表或类型 T?【英文标题】:How to get a list of strings or type T from simplejdbctemplate query? 【发布时间】:2013-02-16 03:56:55 【问题描述】:

我想从我的 simplejdbctemplate 查询表中获取所有行并将它们添加到列表中。最好的方法是什么? 我试过这个:

List<String> carbrands = (List<String>) jdbcTemplate.queryForList("select brand from cars", String.class);

所以我希望有一个字符串列表,例如:

toyota
hyundai
bmw
benz
...

但我无法让它工作。如果我尝试为多种类型执行此操作,我会卡住:

List<Car> values = (List<Car>) jdbcTemplate.queryForList("select name,brand,value from cars", Car.class);

这也不起作用。我希望它返回 Cars,我将其定义为名称、品牌、价值。但是......我已经用谷歌搜索并找不到解决方案。有什么建议吗?

【问题讨论】:

【参考方案1】:

1) 查询 1 是正确的,应该可以工作。

2) 查询 2 应该是

List<Car> list = jdbcTemplate.query("select name,brand,value from cars", new BeanPropertyRowMapper<Car>(Car.class));

Car 应该是一个有效的 JavaBean - 必须有一个公共的无参数构造函数和公共的 setter / getter

public class Car 
     String name;

     public void setName(String name) 
           this.name = name;
     

     public String getName() 
           return name;
     
     ...

您也可以将汽车视为列地图

List<Map<String, Object>> cars = jdbcTemplate.queryForList("select * from cars");
for(Map car : cars) 
     String brand = (String)car.get("brand");
     String name = (String)car.getName("name");
     ....

【讨论】:

呃...我对我的汽车类别中的名称、品牌和价值有争论。如果我现在把它拿出来,那会在这一点上搞砸太多东西,所以如果我能避免它,我宁愿不这样做。还有其他方法吗?另外,我的 maven 说我有查询 1 的不可转换类型。 List> cars = t.queryForList("select name, ...");会给你一个地图列表,1个地图(columnName/value)是1辆车 我不确定我理解你的意思——t.queryList?您只是使用 t 作为 jdbcTemplate 的缩写吗?此外,我没有看到任何仅将查询作为 arg 的 queryforlist ......我应该在查询后输入什么?谢谢! (抱歉,一直没能真正理解simplejdbctemplate) t 是 JdbcTemplate; t.query("select name,brand,value from cars") 将返回所有汽车。 好的...但是那个查询是指哪个查询? 1 还是 2?对不起,如果很明显:(

以上是关于如何从 simplejdbctemplate 查询中获取字符串列表或类型 T?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SimpleJdbcTemplate 上设置QueryTimeout?

SimpleJdbcTemplate 和空参数

Java Spring Jdbc模板

SpringJDBC

jdbctemplte如何拼sql

应用程序在 jdbcTemplate 中随机挂起以进行更新