38

我已经看过并且无法找到我遇到的以下挑战的答案。这似乎很简单,但我一直无法解决它。

我有一个ArrayList类型为Long->的记录 ID 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

4 回答 4

67

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

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();
于 2013-07-24T18:43:22.287 回答
25

如果你有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();
于 2014-10-09T06:28:04.503 回答
-9

@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' 将是字符串参数,每个元素都以单引号和逗号分隔。

于 2017-04-17T17:39:49.213 回答
-24

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

PreparedStatement pstmt = conn.prepareStatement("select * from employee where id in ("+ StringUtils.join(arraylistParameter.iterator(),",") +)");
于 2014-11-13T04:18:21.633 回答