如何将 Arraylist 的每个元素用作 SQL 语句中的列值(为每个元素迭代 Arraylist)?
How to use each element of Arraylist as a column value in SQL statement (iterate the Arraylist for each element)?
我从 ArrayList 中的 table 中收集了不同的项目值。现在我想将 ArrayList 的每个值作为列值进行迭代。
PreparedStatement pstmt =conn.preparedStatement("select distinct(A.ID) from Products A,Products B where A.ID=B.ID and A.Item in (?)");
以上必须在循环中,ArrayList 中的每个元素都用作每次迭代的列值。
您需要为每个值添加一个 ?
参数标记,因此您的代码应该是这样的。
Connection conn = /*connection provided elsewhere*/;
List<String> items = /*item values provided elsewhere*/;
StringBuilder sql = new StringBuilder();
sql.append("select distinct A.ID" +
" from Products A" +
" join Products B on B.ID = A.ID" +
" where A.Item in (");
for (int i = 0; i < items.size(); i++) {
if (i != 0) sql.append(',');
sql.append('?');
}
sql.append(')');
try (PreparedStatement stmt = conn.prepareStatement(sql.toString())) {
for (int i = 1; i <= items.size(); i++)
stmt.setString(i, items.get(i));
try (ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
int id = rs.getInt("ID");
// use id here
}
}
}
在Java8中,使用StringJoiner可以稍微简化代码。
我从 ArrayList 中的 table 中收集了不同的项目值。现在我想将 ArrayList 的每个值作为列值进行迭代。
PreparedStatement pstmt =conn.preparedStatement("select distinct(A.ID) from Products A,Products B where A.ID=B.ID and A.Item in (?)");
以上必须在循环中,ArrayList 中的每个元素都用作每次迭代的列值。
您需要为每个值添加一个 ?
参数标记,因此您的代码应该是这样的。
Connection conn = /*connection provided elsewhere*/;
List<String> items = /*item values provided elsewhere*/;
StringBuilder sql = new StringBuilder();
sql.append("select distinct A.ID" +
" from Products A" +
" join Products B on B.ID = A.ID" +
" where A.Item in (");
for (int i = 0; i < items.size(); i++) {
if (i != 0) sql.append(',');
sql.append('?');
}
sql.append(')');
try (PreparedStatement stmt = conn.prepareStatement(sql.toString())) {
for (int i = 1; i <= items.size(); i++)
stmt.setString(i, items.get(i));
try (ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
int id = rs.getInt("ID");
// use id here
}
}
}
在Java8中,使用StringJoiner可以稍微简化代码。