2015-11-18 18 views
0
public HashMap viewTableData(String tabName) 
    { 
     ArrayList<String> arrayList = new ArrayList<String>(); 
     ArrayList<String> arrayList2 = new ArrayList<String>(); 
     ArrayList<String> arrayList3 = new ArrayList<String>(); 
     ArrayList<String> arrayList4 = new ArrayList<String>(); 
     HashMap discoverMap = new HashMap(); 

     try { 
      int i=1; 
      con = DAOConnection.sqlconnection(); 
      stmt = con.createStatement(); 
      stmt = con.createStatement(); 
      query = "SELECT * FROM "+tabName; 
      System.out.println("Qry executed"); 
      ps = con.prepareStatement(query); 
      rs = ps.executeQuery(query); 
      while(rs.next()){ 
       while(i<=4){ 
       arrayList.add(rs.getString(i)); 
       //arrayList2.add(rs.getString(2)); 
       discoverMap.put("qrycol"+i, arrayList); 
       i++; 
      } 
      } 
      // discoverMap.put("qrycol1", arrayList); 
      // discoverMap.put("qrycol2",arrayList2); 
      System.out.println("Map result:"+discoverMap); 
     } catch (SQLException ex) { 
      Logger.getLogger(Query.class.getName()).log(Level.SEVERE, null, ex); 
      //return null; 
     } 
     return discoverMap; 
    } 

在這裏你可以看到,我已經寫了一個方法,它將從數據庫表中取值並放入Hashmap中。如何將數組列表以動態方式放入哈希表中?

如果我初始化4個不同的arraylist,並添加rs.getString(1),rs.getString(2),...那麼它的工作正常。但我想要一些動態的功能,它會創建願望arraylist並添加rs.getString(i)。 但它運行但沒有獲得慾望輸出。 此處發現地圖顯示結果:地圖結果:{qrycol1 = [1,Indranil,Banerjee,[email protected]],qrycol3 = [1,Indranil,Banerjee,indranil1111 @ gmail.com],qrycol2 = [1,Indranil,Banerjee ,[email protected]],qrycol4 = [1,Indranil,班納吉,[email protected]]} ​​

但是對於下面示出願望輸出代碼:

public HashMap viewTableData(String tabName) 
    { 
     ArrayList<String> arrayList = new ArrayList<String>(); 
     ArrayList<String> arrayList2 = new ArrayList<String>(); 
     ArrayList<String> arrayList3 = new ArrayList<String>(); 
     ArrayList<String> arrayList4 = new ArrayList<String>(); 
     HashMap discoverMap = new HashMap(); 

     try { 
      int i=1; 
      con = DAOConnection.sqlconnection(); 
      stmt = con.createStatement(); 
      stmt = con.createStatement(); 
      query = "SELECT * FROM "+tabName; 
      System.out.println("Qry executed"); 
      ps = con.prepareStatement(query); 
      rs = ps.executeQuery(query); 
      while(rs.next()){ 
       arrayList.add(rs.getString(1)); 
       arrayList2.add(rs.getString(2)); 
       arrayList3.add(rs.getString(3)); 
       arrayList4.add(rs.getString(4)); 
      } 
      discoverMap.put("qrycol1", arrayList); 
      discoverMap.put("qrycol2",arrayList2); 
      discoverMap.put("qrycol3",arrayList3); 
      discoverMap.put("qrycol4",arrayList4); 
      System.out.println("Map result:"+discoverMap); 
     } 

     catch (SQLException ex) { 
      Logger.getLogger(Query.class.getName()).log(Level.SEVERE, null, ex); 
      //return null; 
     } 
     return discoverMap; 
    } 

地圖結果:{qrycol1 = [ 1,2,3,4,6,5,7,8],qrycol3 = [Banerjee,JJJ,Saun,Gupta,efgh,aaaa,姓氏22,Sir],qrycol2 = [Indranil,pora,trao,Som,James, Anup,Abhi,Mia],qrycol4 = [[email protected][email protected][email protected][email protected][email protected][email protected][email protected]。 com,[email protected]]} ​​

這實際上是正確的,但我想動態地。由於我們始終無法假定有多少數量級的數據需要。 如果有人對此有所幫助,這將非常有幫助。提前致謝 。

數據庫表結構:有4列,類型爲varchar(但它可以爲其他表不同,這就是爲什麼我問這個問題。)

回答

1

你需要知道從數據庫返回的列數,如果你知道你可以按照:

 int numOfColumns = 6; // it can be any number you need 

     // initialize the map 
     for (int colIndex = 1; colIndex <= numOfColumns; ++colIndex) { 
      String key = "qrycol" + colIndex; 
      ArrayList<String> list = new ArrayList<>(); 
      discoverMap.put(key, list); 
     } 

     while (rs.next()) { 
      // for each column got from DB, populate the corresponding array list 
      for (int colIndex = 1; colIndex <= numOfColumns; ++colIndex) { 
       String key = "qrycol" + colIndex; 
       ArrayList<String> list = (ArrayList<String>) discoverMap.get(key); 
       list.add(rs.getString(colIndex)); 
      } 
     } 
+0

謝謝BOND。你幫了我很多。 –