我有一個表,然後從數據庫多個ID在那裏我可以選擇一個條目是這樣的:用java
SELECT * FROM `table` WHERE `id` = 1;
我知道我可以很容易地選擇這樣由多個ID條目:
SELECT * FROM `table` WHERE `id` IN (1,2,3);
但現在我已經和MariaDB的/ J連接器實現了這個在Java中,使用java.sql
類:
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;
}
現在,基本上我需要爲我想要插入的每個變量添加一個?
。由於選定的Ids數量可能會有所不同,因此我無法在此處輸入靜態IN (?,?,?)
。我想到的骯髒的解決方案是基於long... ids
的大小生成(?,?,?)
- 但是有沒有更好的「更清潔」的解決方案?
除了在JDBC之上使用庫來爲您做這件事,沒有。 –
PreparedStatement有一個'setArray'方法,可用於某些數據庫的此目的。不幸的是,包括MySql在內的一些數據庫驅動程序不支持它。 – GreyBeardedGeek
查看[this](http://stackoverflow.com/questions/3107044/preparedstatement-with-list-of-parameters-in-a-in-clause),它可能有幫助,因爲這裏只有很少的選項。 –