0

可能重复:
如何通过 Spring JdbcTemplate 生成动态“in (...)” sql 列表?

我正在尝试为IN()java 中的 MsSQL 中的一个子句准备一个 ID 列表。我有下面的代码,它看起来应该可以工作,但它抛出了错误:java.sql.SQLException:将 nvarchar 值“1,2”转换为数据类型 int 时转换失败。

当我传递一个字符串时,为什么它像一个整数一样尝试它,我完全不知所措。任何见解都会很棒。

我也试过换成template.getId()没有template.getId().toString()运气

    //JOINs
    Collection<Template> templates = search.getTemplateCollection();
    if (templates != null && templates.size() > 0) {
        searchQuery.append("INNER JOIN dbo.content_to_template ON content_to_template.template_id IN (:templateIds) AND content_to_template.content_id = content.id ");

        StringBuilder templateIds = new StringBuilder();
        for (Template template : templates) {
            if (templateIds.length() == 0) {
                templateIds.append(template.getId());
            } else {
                templateIds.append(",").append(template.getId());
            }
        }
        queryMap.put("templateIds", templateIds.toString());
    }



return this.namedjdbcTemplate.query(searchQuery.toString(), new MapSqlParameterSource(queryMap), this.contentRowMapper);
4

1 回答 1

2

您需要准备一组模板 ID 并将其传递给地图。字符串分隔的数据可能无法像预期的那样工作。

========================

List templateIds = new ArrayList(); 
templateIds.add(template.getId()); 

----
---

 queryMap.put("templateIds", templateIds); 
于 2012-04-13T13:25:32.267 回答