如何在SQL的IN子句中使用arraylist作为参数

时间:2014-04-04 09:23:40

标签: java mysql sql collections

我有一个整数数组列表。我想在SQL查询的IN子句中使用此列表。我试着在下面做,但我知道它不会工作。有人可以建议一个更好的方法。

List<Integer> **plcList**  = new ArrayList<Integer>();
String finalQuery = "
select plc,direction,ROUND(AVG(CAST(speed as float)),2) as speed,COUNT(plc) as count,time_id 
from processed 
WHERE plc IN " + " " + "(**plcList**)"+ " " + "
group by plc, direction, time_id";

3 个答案:

答案 0 :(得分:0)

我不是Java教授。但我建议你循环遍历你的列表,并用逗号分隔值制作字符串。就像在PHP中一样,我们使用implode函数。因此你的最终字符串将是这样的

 1,2,3,4,5

然后在你的SQL查询中使用它

我不确定我的代码但是尝试这个,因为我不是Java程序员( 如果出现语法错误,请进行必要的更改)

String intlist = "";
for (String temp : list) 
{
   intlist += ","+temp;
}
String Str = new String(intlist);
String sqlstring = Str.substring(1);

答案 1 :(得分:0)

我建议看看这个:PreparedStatement IN clause alternatives?

此页面:http://www.javaranch.com/journal/200510/Journal200510.jsp#a2

在您的情况下,您可以循环构建整数列表,如上面提到的Abdul。

答案 2 :(得分:0)

试试这个..

List<Integer> myList = new ArrayList<Integer>();
StringBuilder builder = new StringBuilder();
// length of the list
int locSize = myList.size();

Object[] args = new Object[locSize];               
for( int i = 0; i < locSize; i++ ) {
  builder.append(" ?, " );
  args[i]= myList.get(i);
}

然后,您可以在查询中使用此功能。

....WHERE plc IN ("+ builder.toString() +") group by plc, direction, time_id";

有关类似问题,请参阅passing object[] to sql query