如何在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的名称。