2013-09-26 17 views
3

是否有任何方式來執行以下查詢:如何將一個List/Set/Array傳遞給Apache QueryRunner作爲參數值?

select * from table where field in (?) 

並傳遞一個列表/組/陣列作爲?佔位符的值。

我使用Apache db-commons庫中的QueryRunner。

+0

對於那些不熟悉,請出示代碼,所以我們知道API可用。 –

+0

我相信你可以使用('value1','value2'),但是那些會在「in」之前出現,而'field'會在之後出現。 otdering可能是錯誤的。 – Rogue

+0

我有一個很大的選擇查詢(〜35行),我的想法是將查詢存儲在類文件附近的資源文件中,讓它成爲'SearchController.java'和'SearchController.findClientByIp.sql'。這個大的查詢應該通過ip找到客戶端,或者一個ip地址列表。我不想每次構造查詢,即如果我有2個IP地址作爲輸入,則將查詢重寫爲'where ip in(?,?)'。這是我的控制器代碼片段http://pastebin.com/JV8KhxJG和sql代碼片段http://pastebin.com/tjVj​​BaZB – Kerb

回答

0

肯定有,使用createArrayOf

final List<Integer> id = new ArrayList<>(); 
id.add(12); 
id.add(15); 

final Array toDelete = connection.createArrayOf("int", id.toArray()); 

queryRunner.query(
    connection, 
    "SELECT * FROM table WHERE id = ANY(?)", 
    resultSetHandler, 
    toDelete 
); 

(例如是使用PostgreSQL,但也應該爲別人打工)

相關問題