値(1, 2, 3
など)があり、SQLクエリにそのリストを渡したい:SQLクエリでListを渡す方法
"select name from tbl where id in" + list
どうすればよいでしょうか?
値(1, 2, 3
など)があり、SQLクエリにそのリストを渡したい:SQLクエリでListを渡す方法
"select name from tbl where id in" + list
どうすればよいでしょうか?
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
)
どのようにSQLを構築しているかによって異なります。あなたはそれをあなたのようなSQLに見えるように行う必要があり、自分自身(悪いアイデア)を構築している場合 - あなたはHQLを休止指定あなたのコメントであるので
... where id in (1,2,3)...
を、のようなもの -
Query query = session.createSQLQuery("from User where id in :ids ");
query.setParameter("ids", idsList);
List list = query.list();
を取得する必要がありますあなたは始まった。注User
は、照会する表にマップしたオブジェクトの名前です。
エラーを取得する「メソッドcreteateQuery()のシグネチャがありません」 – n92
@vayay、 – hvgotcodes
文字列sqlQuery = "tblから名前を選択します。" id + "sqlFormatedList(list);あなたは、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();
}
:
String sql="select name from tbl where id in ("+StringUtils.join(list, ',')+")";
Statement st=connection.createStatement();
st.execute(sql);
Java 8では 'String.join("、 "、list)'を使うことができますが、この解決法はStringパラメータには適していません。 – Pino
を私はあなたがHQLを使用しているコメントへの返信で参照してください。
where id in (:ids)
をして、あなたのリストを渡しsetParameterList("ids", list)
を使用します。その場合は、Hibernateの人々は、クエリでは、単に指定し、あなたのためにこの1つは簡単になります。 Hibernateはあなたのためにすべての拡張を行います!
私は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();
}
分析: 入力PARAMS:[ABC、MNP、XYZ];のようにJava形式の文字列のリスト
出力:( 'ABC' 、 'MNP'、 'XYZ'); SQLクエリで使用される文字列。
sqlFormattedString =( 'ABC'、 'MNP'、 'XYZ');
上記のo/p文字列がこのクエリに入ります。select * from tableName tnここで、tn.codeはsqlFormattedStringにあります。
PS:パラメータリストのコードリストは、java.util.Listです。
あなたのSQLを構築するために使用しているのは? – hvgotcodes
Hql executQuery() – n92