这是我对JDBCTemplates的第一次体验,我遇到了一个需要使用如下查询的情况:
SELECT * FROM table WHERE field IN (?)
Run Code Online (Sandbox Code Playgroud)
我怎么做?我已经尝试传递一个列表/数组值但是没有做到这一点,我得到了一个异常.我当前的代码如下所示:
Long id = getJdbcTemplate().queryForLong(query, new Object[]{fieldIds});
Run Code Online (Sandbox Code Playgroud)
Spring Documentation声明除了生成所需数量的"?"之外,没有办法做到这一点.占位符以匹配参数List的大小.有解决方法吗?
Che*_*ech 48
使用NamedParameterJdbcTemplate而不是SimpleJdbcDaoSupport进行漫游,您可以在其中执行以下操作:
List integerList = Arrays.asList(new Integer[] {1, 2, 3});
Map<String,Object> params = Collections.singletonMap("fields", integerList);
Long id = namedParameterJdbcTemplate.queryForLong("SELECT * FROM table WHERE field IN (:fields)", params);
Run Code Online (Sandbox Code Playgroud)
但是,这对于您可以在列表中传递的参数数量有潜在的灾难性限制,这取决于您使用的数据库.
希望这有用......
| 归档时间: |
|
| 查看次数: |
33869 次 |
| 最近记录: |