2013-12-16 169 views
0

我能夠實現我想要的大部分,但在這裏我卡住..請幫助。如何迭代通過哈希映射映射列表元素

public class DatabaseHandler { 
private static String DB_CLASS ="com.microsoft.sqlserver.jdbc.SQLServerDriver"; 
//private static String DB_USER,DB_PASSWORD, DB_NAME, DB_URL, DB_QUERY_ID; 
Statement stmt; //=null; 
Connection conn;// = null; 
public static Map<Integer, List<String>> allActiveQuery = new HashMap<Integer, List<String>>(); 

public DatabaseHandler() { 

    brattleDb(); 


} 

public void brattleDb(){ 
     try { 
     Class.forName(DB_CLASS); 
     conn = DriverManager.getConnection("jdbc:sqlserver://TOSHIBA-PC;databasename=brattle;user=sa;password=naved"); 
     stmt = conn.createStatement(); 
     ResultSet rs = stmt.executeQuery("SELECT * FROM database_details_master WHERE status = 1"); 
    int i=0; 
    while(rs.next()){ 
     List<String> row = new ArrayList<String>(); 
     row.add(rs.getString(1).toString()); 
     row.add(rs.getString(2).toString()); 
     row.add(rs.getString(3).toString()); 
     row.add(rs.getString(4).toString()); 
     row.add(rs.getString(5).toString()); 
     row.add(Integer.toString(rs.getInt(6))); 
     row.add(Integer.toString(rs.getInt(7))); 
     row.add(rs.getString(8).toString()); 
     row.add(rs.getString(9).toString()); 
     row.add(rs.getString(10).toString()); 
     row.add(rs.getString(11).toString()); 
     row.add(Integer.toString(rs.getInt(12))); 
     row.add(Integer.toString(rs.getInt(13))); 
     allActiveQuery.put(i, row); 
     i++; 
    } 
      rs.close(); 
      conn.close(); 

    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 


} 

public void setDynamicConnection(String db_name, String db_user, String db_pass, String db_url){ 
    try { 
     Class.forName(DB_CLASS); 
     conn= DriverManager.getConnection("jdbc:sqlserver:"+db_url+";databasename="+db_name+";user="+db_user+";password="+db_pass+""); 
     stmt = conn.createStatement(); 

    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 

}

上述代碼讀取操作從該狀態爲活性的數據庫中的行。

JSP的我試圖獲取所有類似的行:

<% 
     // Connection to get active queries 

     try{ 
     DatabaseHandler dbh = new DatabaseHandler(); 

     for(Map.Entry<Integer, List<String>> entry: dbh.allActiveQuery.entrySet()){ 
      Integer key = entry.getKey(); 
      out.println("Query:"+key+"<br><hr>"); 
       List<String> values = entry.getValue(); 
       out.println(values+ "<br> <hr> "); 

     } 

     } 


    catch(Exception e){ 
     out.print(e.toString()); 
    } 

     %> 

而結果我得到這個:

1. [sa, wms, TOSHIBA-PC, naved, FIFO Query, 23, 35, select CSDETL01.SKUCODE ,SKUMST00.SKUDESC ,CSDETL01.BATCH ,SKUMST00.MRP , CSDETL01.MFGDATE ,CSDETL01.EXPDATE ,sum(CSDETL01.CURQTY) , Datediff(d, CSDETL01.MFGDATE, CSDETL01.EXPDATE) ,Datediff(d, GETDATE(), CSDETL01.EXPDATE) , Datediff(d, GETDATE(), CSDETL01.EXPDATE)*100/Datediff(d, CSDETL01.MFGDATE, CSDETL01.EXPDATE) from CSDETL01, SKUMST00 where SKUMST00.INOWNER =~MCCAIN~ and SKUMST00.whse =~MEH~ and SKUMST00.SKUCODE = CSDETL01.SKUCODE and CSDETL01.STATUS <= ~400~ group by CSDETL01.SKUCODE, CSDETL01.BATCH, CSDETL01.MFGDATE, CSDETL01.EXPDATE, SKUMST00.MRP, SKUMST00.SKUDESC order by CSDETL01.SKUCODE, CSDETL01.BATCH, [email protected], , , 1, 24] <br> 
2. [sa, wms, TOSHIBA-PC, naved, Partial Pallet Query, 23, 38, Select PALLETNO,SKUCODE, BATCH, MFGDATE, EXPDATE, CURLOCID, DTLM, sum(CURQTY) as SumQTY from CSDETL01 where INOWNER =~MCCAIN~ and whse =~MEH~ and SKUCODE in (~919044~, ~911802~) and STATUS <= ~400~ and LDUNIT = ~PALLET~ group by PALLETNO, SKUCODE, BATCH, MFGDATE, EXPDATE, CURLOCID, DTLM order by PALLETNO, [email protected], , , 1, 1] 
3. [sa, wms, TOSHIBA-PC, naved, FEFO QUERY, 23, 40, select CSDETL01.SKUCODE ,SKUMST00.SKUDESC ,CSDETL01.BATCH ,SKUMST00.MRP , CSDETL01.MFGDATE ,CSDETL01.EXPDATE ,sum(CSDETL01.CURQTY) , Datediff(d, CSDETL01.MFGDATE, CSDETL01.EXPDATE) ,Datediff(d, GETDATE(), CSDETL01.EXPDATE) , Datediff(d, GETDATE(), CSDETL01.EXPDATE)*100/Datediff(d, CSDETL01.MFGDATE, CSDETL01.EXPDATE) from CSDETL01, SKUMST00 where SKUMST00.INOWNER =~MCCAIN~ and SKUMST00.whse =~MEH~ and SKUMST00.SKUCODE = CSDETL01.SKUCODE and CSDETL01.STATUS <= ~400~ group by CSDETL01.SKUCODE, CSDETL01.BATCH, CSDETL01.MFGDATE, CSDETL01.EXPDATE, SKUMST00.MRP, SKUMST00.SKUDESC order by CSDETL01.SKUCODE, CSDETL01.BATCH, [email protected], , , 1, 1] 

我想通過列表作爲單個元素的值進行迭代,但我作爲整個字符串獲得價值...

我想輸出是這樣的

1. sa 
wms 
TOSHIBA-PC 
naved 
FIFO Query, 23, 35, select CSDETL01.SKUCODE ,SKUMST00.SKUDESC ,CSDETL01.BATCH ,SKUMST00.MRP , CSDETL01.MFGDATE ,CSDETL01.EXPDATE ,sum(CSDETL01.CURQTY) , Datediff(d, CSDETL01.MFGDATE, CSDETL01.EXPDATE) ,Datediff(d, GETDATE(), CSDETL01.EXPDATE) , Datediff(d, GETDATE(), CSDETL01.EXPDATE)*100/Datediff(d, CSDETL01.MFGDATE, CSDETL01.EXPDATE) from CSDETL01, SKUMST00 where SKUMST00.INOWNER =~MCCAIN~ and SKUMST00.whse =~MEH~ and SKUMST00.SKUCODE = CSDETL01.SKUCODE and CSDETL01.STATUS <= ~400~ group by CSDETL01.SKUCODE, CSDETL01.BATCH, CSDETL01.MFGDATE, CSDETL01.EXPDATE, SKUMST00.MRP, SKUMST00.SKUDESC order by CSDETL01.SKUCODE, CSDETL01.BATCH 
[email protected], 
,//null values 
, //null vaues 
1 
24 

等等......請好心幫我卡在這裏..

+0

我知道我失去了一些東西愚蠢的,但我無法弄清楚..請我是新來的Java – Casey

+0

嘗試{ \t \t數據庫處理器胸徑=新數據庫處理器(); \t \t \t 爲\t(Map.Entry的<整數,列表>項:dbh.allActiveQuery.entrySet()){ \t \t \t整數鍵= entry.getKey(); \t \t \t out.println(「Query:」+ key +「
」); \t \t \t \t列表 values = entry.getValue(); \t \t \t \t迭代器 itr = values.iterator(); \t \t \t \t而(itr.hasNext()){ \t \t \t \t \t通過out.println(itr.next()+ 「
」); \t \t \t \t \t \t \t \t \t} \t \t \t \t \t \t \t \t \t出來。println(「


」); \t \t \t \t \t \t \t } \t \t } \t \t \t \t \t \t \t趕上(例外五){ \t \t \t的out.print(e.toString()); \t \t} \t \t \t \t%> – Casey

回答

0

爲什麼不簡單地遍歷結果呢?

for(Map.Entry<Integer, List<String>> entry: dbh.allActiveQuery.entrySet()) { 
     out.println("Query:"+ entry.getKey() +"<br>"); 
     for (String val : entry.getValue()) { 
      out.println(val + "<br>"); 
     } 
     out.println("<hr>"); 

    } 
+0

現在解決了。你的代碼也能正常工作。謝謝Jirka-x1 – Casey