2017-04-16 5 views
0

を使用して、データベースから複数の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のサイズに基づいて(?,?,?)を生成しますが、これにはより良い「クリーナー」ソリューションがありますか?

+0

あなたのためにそれを行うJDBCの上でライブラリを使用する以外は、いいえ。 –

+0

PreparedStatementには、この目的のためにいくつかのデータベースで使用できる 'setArray'メソッドがあります。残念ながら、MySqlを含むいくつかのデータベースドライバは、それをサポートしていません。 – GreyBeardedGeek

+0

[こちら](http://stackoverflow.com/questions/3107044/preparedstatement-with-list-of-parameters-in-a-in-clause)を参照してください。 –

答えて

-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); 
+0

MySqlのjdbcドライバはsetArrayメソッドをサポートしていません – GreyBeardedGeek

+0

@GreyBeardedGeek trueしかし、MariaDBはそれをサポートしていますか??? –

+0

良い質問 - それを試してみて、私たちに知らせてみませんか? – GreyBeardedGeek

関連する問題