如何使用arraylist作为预准备语句参数

时间:2013-07-24 18:38:31

标签: java arraylist prepared-statement

我看过并且无法找到我正在接受的以下挑战的答案。它 看起来很简单但我无法解决它。

我有ArrayListLong类型的记录ID - &gt; ArrayList<Long>。我想用 这个记录ID列表,用于从另一个表中选择行。到现在为止还挺好。现在上了 挑战...

a)我正在使用预准备语句,使用ArrayList作为输入从表中选择数据    为了这。

selectPS = dbConnection.prepareStatement("select columnA from tableA where id in ?");

上述问题 - 如何定义参数?以上似乎不正确    ArrayList类型参数。

b)设置准备参数的值时,我也遇到了问题    声明。没有设置ArrayList类型值的方法,我认为没有其他可行的方法    选项。

---> selectPS.set?????(1, arraylistParameter);
     ResultSet rs = selectPS.executeQuery(); 

非常感谢您给我的任何帮助或指导。

谢谢。

4 个答案:

答案 0 :(得分:49)

您可能希望使用下面javadoc中提到的setArray方法:

http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html#setArray(int, java.sql.Array)

示例代码:

PreparedStatement pstmt = 
                conn.prepareStatement("select * from employee where id in (?)");
Array array = conn.createArrayOf("VARCHAR", new Object[]{"1", "2","3"});
pstmt.setArray(1, array);
ResultSet rs = pstmt.executeQuery();

答案 1 :(得分:22)

如果您有 ArrayList ,则转换为 Array [Object]

ArrayList<String> list = new ArrayList<String>();
PreparedStatement pstmt = 
            conn.prepareStatement("select * from employee where id in (?)");
Array array = conn.createArrayOf("VARCHAR", list.toArray());
pstmt.setArray(1, array);
ResultSet rs = pstmt.executeQuery();

答案 2 :(得分:-3)

@JulienD 最好的方法是将上述过程分为两个步骤。

第1步: 让我们说'rawList'作为你想要在预准备语句中作为参数添加的列表。

创建另一个列表:

ArrayList<String> listWithQuotes = new ArrayList<String>();

for(String element : rawList){
    listWithQuotes.add("'"+element+"'");
}

第2步: 将'listWithQuotes'逗号分隔。

String finalString = StringUtils.join(listWithQuotes.iterator(),",");

'finalString'将是字符串参数,每个元素都是单引号和逗号分隔。

答案 3 :(得分:-14)

为什么要让生活变得艰难 -

PreparedStatement pstmt = conn.prepareStatement("select * from employee where id in ("+ StringUtils.join(arraylistParameter.iterator(),",") +)");