如何使用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
方法:
示例代码:
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(),",") +)");