0
Possible Duplicate:
How to generate a dynamic 「in (…)」 sql list through Spring JdbcTemplate?安全查詢
我想準備ID列表在Java中的IN()
子句中MSSQL準備逗號分隔的列表。我有下面的代碼,它看起來應該可以工作,但它會引發錯誤: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);
不應該'templateIds'是個整數,而不是字符串的集合?即使字符串解決方案工作,您的解決方案也不會很安全,因爲'template.getId()'中的任何逗號都會引入虛假值。 – biziclop 2012-04-13 13:07:58
是的,正如@biziclop提到的那樣 - 嘗試使用int []作爲參數,如果有可能的話。 – JMelnik 2012-04-13 13:08:43
看看這個: http://stackoverflow.com/questions/2810418/how-to-execute-query-with-in-clause-in-spring – Vadzim 2012-04-13 13:09:22