2011-06-09 57 views
2

我需要做select *基於輸入ID列表,什麼是批次選擇的最佳方式?這裏是我所擁有的建築物選擇查詢使用IN(...)條款

 
StringBuilder inClause = new StringBuilder(); 
boolean firstValue = true; 
for (int i=0; i < batchSize; i++) { 
    inClause.append('?'); 
    if (firstValue) { 
    firstValue = false; 
    } else { 
    inClause.append(','); 
    } 
} 
PreparedStatement stmt = conn.prepareStatement(
    "select id, name from users where id in (" + inClause.toString() + ')'); 


for (int i=0; i < batchSize; i++) { 
    stmt.setInt(i); // or whatever values you are trying to query by 
} 

回答

2

對我來說這看起來相當不錯。只要發現有一個邏輯錯誤在這個代碼塊,

boolean firstValue = true; 
for (int i=0; i < batchSize; i++) { 
    inClause.append('?'); 
    if (firstValue) { 
    firstValue = false; 
    } else { 
    inClause.append(','); 
    } 
} 

第一個元素後,不會追加,。最後會有一個,。所以,你不必在意這裏,。只要做到這一點這樣

for (int i=0; i < batchSize; i++) { 
    inClause.append('?, '); 
} 

再剁最後兩個字符是這樣,

PreparedStatement stmt = conn.prepareStatement(
    "select id, name from users where id in (" + 
    inClause.substring(0, inClause.length()-2) + ')'); 
+0

這是可能的最快的方法? – user775187 2011-06-09 03:53:56

+0

@ user775187:如果'id'是唯一的,並且您需要基於多個'ids'查詢記錄 - 只要沒有其他選項,那麼'IN(...)'就是方法。因此,您必須使用此類或類似技術來構建您的查詢。 – 2011-06-09 04:09:11