我有值(例如1, 2, 3
),我想将该列表传递给SQL查询:
"select name from tbl where id in" + list
我怎么能实现这个目标?
答案 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();
}