2017-04-16 63 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; 
} 

現在,基本上我需要爲我想要插入的每個變量添加一個?。由於選定的Ids數量可能會有所不同,因此我無法在此處輸入靜態IN (?,?,?)。我想到的骯髒的解決方案是基於long... ids的大小生成(?,?,?) - 但是有沒有更好的「更清潔」的解決方案?

+0

除了在JDBC之上使用庫來爲您做這件事,沒有。 –

+0

PreparedStatement有一個'setArray'方法,可用於某些數據庫的此目的。不幸的是,包括MySql在內的一些數據庫驅動程序不支持它。 – GreyBeardedGeek

+0

查看[this](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