を使用して、データベースから複数の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;
}
今、基本的には、挿入したい変数ごとに?
を置く必要があります。選択されたIDの量が変わる可能性があるので、静的なIDを入力することはできません。IN (?,?,?)
私の頭に浮かぶ汚れたソリューションは、long... ids
のサイズに基づいて(?,?,?)
を生成しますが、これにはより良い「クリーナー」ソリューションがありますか?
あなたのためにそれを行うJDBCの上でライブラリを使用する以外は、いいえ。 –
PreparedStatementには、この目的のためにいくつかのデータベースで使用できる 'setArray'メソッドがあります。残念ながら、MySqlを含むいくつかのデータベースドライバは、それをサポートしていません。 – GreyBeardedGeek
[こちら](http://stackoverflow.com/questions/3107044/preparedstatement-with-list-of-parameters-in-a-in-clause)を参照してください。 –