如何在SQL查询中传递List
我有值(例如1, 2, 3
),我想将该列表传递给SQL查询:
"select name from tbl where id in" + list
我怎么能实现这个目标?
你必须将你的列表直接放到sql语句中
例:
String sql="select name from tbl where id in ("+StringUtils.join(list, ',')+")"; Statement st=connection.createStatement(); st.execute(sql);
我在你的回复中看到你正在使用HQL的评论。 如果是这种情况,Hibernate人员会在查询中为您提供方便,只需指定:
where id in (:ids)
然后使用setParameterList("ids", list)
传递列表。 Hibernate将为您完成所有扩展!
SQL语法是:
select name from tbl where id in (1,2,3)
您所要做的就是构建以逗号分隔的项目列表并将其插入字符串中。
哦,强制性的sql字符串构建警告:不要!
将列表作为逗号分隔列表传递,并使用拆分函数将其拆分为临时表变量。
CREATE FUNCTION dbo.Split (@sep char(1), @s varchar(512)) RETURNS table AS RETURN ( WITH Pieces(pn, start, stop) AS ( SELECT 1, 1, CHARINDEX(@sep, @s) UNION ALL SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1) FROM Pieces WHERE stop > 0 ) SELECT pn, SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s FROM Pieces )
String sqlQuery =“从tbl中选择名称,其中id为”+ sqlFormatedList(list);
private String sqlFormatedList(List list){ StringBuilder sb = new StringBuilder(); sb.append("("); for (Integer i : list){ sb.append(i+","); } sb.deleteCharAt(sb.length() -1); sb.append(")"); return sb.toString(); }
我尝试了Farmour提供的解决方案。 它简单,高效,有效。 我根据自己的需要修改了它…并且还尝试了调试以确保其格式完全符合我的要求。
public static String sqlFormatedList(List codeList){StringBuilder sb = new StringBuilder(); sb.append( “(”);
for (String str : codeList){ sb.append("'"+str+"',"); } sb.deleteCharAt(sb.length() -1); sb.append(")"); return sb.toString(); }
简要分析:输入参数:[ABC,MNP,XYZ]; 作为Java格式的字符串列表
输出:(’ABC’,’MNP’,’XYZ’); as SQL在SQL查询中使用的字符串。
sqlFormattedString =(’ABC’,’MNP’,’XYZ’);
上面的o / p字符串在此查询中。 select * from tableName as tn where tn.code in sqlFormattedString;
PS:参数列表中的codeList是java.util.List
这取决于你如何构建你的SQL。 如果你自己构建它(坏主意)你需要让sql看起来像 –
... where id in (1,2,3)...
因为在你的评论中你指定了hibernate hql,就像 –
Query query = session.createSQLQuery("from User where id in :ids "); query.setParameter("ids", idsList); List list = query.list();
应该让你开始。 注意User
是您映射到要查询的表的Object的名称。