2017-05-31 101 views
0

我有一個鍵和值(整數數組)的散列表HashMap<key, array>我想從一個sql表中檢索數據,該列與匹配存儲的數組中的值在一個散列圖基於散列表中的值從表中檢索數據

我可以通過兩種方式做到這一點:從表中獲取所有數據,並通過hashmap迭代,其他迭代通過hashmap,並在每次迭代中應用where子句,使n次調用數據庫。

除了上述之外,有沒有一種有效的方法可以做到這一點?

+0

我假設他們中的任何一個是低效的,你的SQL查詢應該在一次數據庫調用中檢索。如果結果太大而無法通過java客戶端處理,請分批處理。 – SomeDude

+0

這顯然取決於表格的大小以及散列映射中有多少條目。想一想:想象一下,散列圖中有十個條目,表中有一億行。現在,假設哈希映射中有一萬個條目,並且有六行的表。你有沒有看到爲什麼你沒有得到任何答案? – Dima

回答

0

使用PreparedStatementWHERE子句中設置具有IN條件的查詢。這段代碼應該給你的一般想法:

values = new int[]{1,2,3,4,5}; 
    String query = 
     "SELECT film_id, title\n" 
     + "FROM film\n" 
     + "WHERE film_Id IN ("; 
    for (int i = 0; i < values.length; ++i) { 
     if (i > 0) { 
      query += ","; 
     } 
     query += "?"; 
    } 
    query += ")"; 

    try { 
     Connection conn = DriverManager.getConnection("db-url", "user", "pwd"); 
     PreparedStatement stmt = conn.prepareStatement(query); 
     for (int i = 0; i < values.length; ++i) 
      stmt.setInt(i+1, values[i]); 
     ResultSet rs = stmt.executeQuery(); 
     while (rs.next()){ 
      // process results 
     } 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
+0

使用Oracle時,您必須小心使用動態「in」語句,因爲它的限制爲1000。 – tsolakp