我看过并且无法找到我正在接受的以下挑战的答案。它 看起来很简单但我无法解决它。
我有ArrayList
个Long
类型的记录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();
非常感谢您给我的任何帮助或指导。
谢谢。
答案 0 :(得分:49)
您可能希望使用下面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();
答案 1 :(得分:22)
如果您有 ArrayList ,则转换为
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(),",") +)");