如何在SQL查询中传递List

时间:2011-08-17 16:01:39

标签: java sql

我有值(例如1, 2, 3),我想将该列表传递给SQL查询:

"select name from tbl where id in" + list 

我怎么能实现这个目标?

8 个答案:

答案 0 :(得分:11)

你必须将你的列表直接放到sql语句

示例:

String sql="select name from tbl where id in ("+StringUtils.join(list, ',')+")";
Statement st=connection.createStatement();
st.execute(sql);

答案 1 :(得分:4)

我在回复你的评论时看到你正在使用HQL。如果是这种情况,Hibernate人员会在查询中为您提供方便,只需指定:

where id in (:ids)

然后使用setParameterList("ids", list)传递您的列表。 Hibernate将为您完成所有扩展!

答案 2 :(得分:0)

SQL语法是:

select name from tbl where id in (1,2,3)

您所要做的就是构建逗号分隔的项目列表并将其插入字符串中。

哦,强制性的sql字符串构建警告:不要!

答案 3 :(得分:0)

将列表作为逗号分隔列表传递,并使用拆分函数将其拆分为临时表变量。

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
  )

答案 4 :(得分:0)

这取决于你如何构建你的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是您映射到要查询的表的对象的名称。

答案 5 :(得分:0)

String sql Query =“从表中选择名称,其中id为+ + sql格式列表(列表);

private String sqlFormatedList(List<Integer> list){
 StringBuilder sb = new StringBuilder();
 sb.append("(");
 for (Integer i : list){
   sb.append(i+",");
 }
 sb.deleteCharAt(sb.length() -1);
 sb.append(")");
 return sb.toString();
}

答案 6 :(得分:0)

使用Java 8及更高版本:

String inClause = list.stream().map(id-> String.valueOf(id)).collect(toStringJoiner(","));
String sql = "select name from tbl where name in (" + inClause + ")";

答案 7 :(得分:0)

private static String sqlFormatedList(List<String> list){
     StringBuilder sb = new StringBuilder();
     sb.append("('");
     for (String i : list){
       sb.append(i+"','");
     }
     sb.deleteCharAt(sb.length() -1);
     sb.deleteCharAt(sb.lastIndexOf(","));
     sb.append(")");
     return sb.toString();
    }