jdbctemplate使用动态sql返回多行

时间:2014-06-23 12:01:52

标签: java jdbctemplate

我有一个方法需要从DB返回一个字符串列表。

private static List<String> getUserForAccount(final String account) {
   String sql = "SELECT NAME FROM CLIENTS WHERE ACCOUNT = ?";

}

我不确定哪种jdbcTemplate方法最适合这种情况。我不认为我可以使用queryForList(),因为SQL有一个参数。

欢迎任何建议。

谢谢

1 个答案:

答案 0 :(得分:1)

查看JdbcTemplate API。你认为“我认为我不能使用queryForList(),因为SQL有一个参数”真的没有多大意义。我认为所有queryForList()都采用参数,即参数Object[] args,如

queryForList()有许多重载方法,但我认为这是你想要的方法。基本上只是传递你的查询,一个参数数组,在你的情况下只有account,并传递db Types (int)参数。像

这样的东西
public class SomeDaoImpl extends JdbcTemplate implements SomeDao {
    private static final String NAME_BY_ACCOUNT = 
                                "SELECT NAME FROM CLIENTS WHERE ACCOUNT = ?"

    public List<Map<String, Object>> getUsernameByAccount(String account) {
        return (List<Map<String, Object>>) queryForList(
                                           NAME_BY_ACCOUNT,
                                           new Object[] { account },
                                           new int[] { Types.VARCHAR });
    }
}

键返回将是列的名称。然后你可以迭代像

这样的地图列表
List<Map<String, Object>> result = someDao.getUsernameByAccount(account);
for (Map map : result) {
    System.out.println(map.get("NAME"));
}

您可能还会对某些重载query()方法感兴趣,这些方法采用PreparedStatementSetterRowMapper的变体形式。看看我上面链接的API