que tengo de valores (1, 2, 3
, por ejemplo), y quiero pasar esa lista a una consulta SQL:Cómo pasar lista en la consulta SQL
"select name from tbl where id in" + list
¿Cómo puede ocurrir lograr esto?
que tengo de valores (1, 2, 3
, por ejemplo), y quiero pasar esa lista a una consulta SQL:Cómo pasar lista en la consulta SQL
"select name from tbl where id in" + list
¿Cómo puede ocurrir lograr esto?
La sintaxis SQL es:
select name from tbl where id in (1,2,3)
Todo lo que tiene que hacer es construir la coma lista de elementos separados e insertarlo en la cadena.
Ah, y la obligatoriedad de la cadena de sql de advertencia de construcción: ¡no!
Pase la lista como una lista separada por comas y use una función dividida para dividirla en una variable de tabla temporal.
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
)
depende de cómo está construyendo su sql. Si usted está construyendo por sí mismo (mala idea) que tiene que hacer que el aspecto de SQL como -
... where id in (1,2,3)...
Dado que en su comentario se especifica Hibernate HQL, algo así como -
Query query = session.createSQLQuery("from User where id in :ids ");
query.setParameter("ids", idsList);
List list = query.list();
debe recibir tú empezaste. La nota User
es el nombre del objeto que asignó a la tabla que desea consultar.
Obteniendo un error "No signature of method creteateQuery()" – n92
@vinay, publico el código de falla y stacktrace en la pregunta editando – hvgotcodes
Cadena sqlQuery = "seleccionar nombre de tbl donde id en" + sqlFormatedList (lista);
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();
}
usted tiene que poner su lista directamente a la declaración de sql
ejemplo:
String sql="select name from tbl where id in ("+StringUtils.join(list, ',')+")";
Statement st=connection.createStatement();
st.execute(sql);
Con Java 8 puede usar 'String.join (", ", list)', sin embargo, esta solución no es apropiada para los parámetros de String. – Pino
veo en su respuesta a un comentario que está utilizando HQL. Si ese es el caso, las personas hacen de este uno de Hibernate fácil para usted, en la consulta, sólo tiene que especificar:
where id in (:ids)
y luego usar setParameterList("ids", list)
pasar su lista. ¡Hibernate hará toda la expansión por ti!
Probé la solución provista por Farmour. Es simple, eficiente & funciona. Lo modifiqué lil bit de acuerdo con mi necesidad ... & también probé la depuración para asegurarme de que su formato sea exactamente como yo quiero.
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();
}
Análisis en breve: de entrada Parámetros: [ABC, MNP, XYZ]; como lista de cadenas de formato Java
de salida: ('ABC' , 'MNP', 'XYZ'); como String para ser utilizado en la consulta SQL.
sqlFormattedString = ('ABC', 'MNP', 'XYZ');
Esta cadena de o/p anterior va en esta consulta. select * from tableName as tn donde tn.code en sqlFormattedString;
PS: lista de códigos en la lista de parámetros es java.util.List
lo está usando para construir su SQL? – hvgotcodes
Hql executQuery() – n92