如何使用arraylist作为预处理语句参数

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

我有一个类型为Long的记录ID的ArrayList – > ArrayList 。 我想使用此记录ID列表从另一个表中选择行。 到现在为止还挺好。 现在迎接挑战……

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

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

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

b)在为预准备语句设置参数值时,我也遇到了问题。 没有设置ArrayList类型值的方法,我看不到其他可行的选项。

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

我们非常感谢您为我提供的任何帮助或指导。

谢谢。

您可能想要使用下面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(); 

如果你有ArrayList然后转换为Array [Object]

 ArrayList list = new ArrayList(); 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(); 

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

步骤1:让我们将’rawList’作为您要在预准备语句中添加为参数的列表。

创建另一个列表:

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

第2步 :将’listWithQuotes’逗号分隔开。

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

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

为什么让生活变得艰难

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