我有一个表格,我可以选择这样的单个条目:
SELECT * FROM `table` WHERE `id` = 1;
我知道我可以通过多个ID轻松选择条目:
SELECT * FROM `table` WHERE `id` IN (1,2,3);
但现在我使用java.sql
类在MariaDB / J Connector中用Java实现了这个:
public ArrayDeque<DataType> getItems(long... ids) {
ArrayDeque<DataType> deque = new ArrayDeque<DataType>();
PreparedStatement st = null;
ResultSet resultSet = null;
try {
st = getConnection().prepareStatement("SELECT * FROM `table` WHERE `id` = ?;");
st.setLong(1, id);
resultSet = st.executeQuery();
while (resultSet.next()) {
deque.add(parseResultSetToDataType(resultSet));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(resultSet, st);
}
return deque;
}
现在,基本上我需要为我要插入的每个变量放一个?
。由于所选择的ID数量可能会有所不同,因此我无法在其中放置静态IN (?,?,?)
。我想到的肮脏解决方案是根据(?,?,?)
的大小生成long... ids
- 但对此有更好的“更清洁”解决方案吗?
答案 0 :(得分:-1)
PreparedStatement statement = connection.prepareStatement("Select * from table where id in (?)");
Array array = statement.getConnection().createArrayOf("int", new Object[]{1, 2,3});
statement.setArray(1, array);