2013-09-27 58 views
1
Statement selectStatement = connection.createStatement(); 
     ResultSet selectResultSet = selectStatement.executeQuery(query); 
     logger.info("sql query " + selectStatement.toString()); 
     ResultSetMetaData rsmd = selectResultSet.getMetaData(); 
     int columnsNumber = rsmd.getColumnCount(); 
     String[] row = new String[columnsNumber]; 

     int ctr = 0; 
     logger.info("Reading from database..."); 
     while(selectResultSet.next()) 
     { 
      for(int i=0;i<columnsNumber;i++){ 
       row[i] = selectResultSet.getString(i+1); 
      } 
      System.out.println(); 
      dataFromQuery.put(ctr++, row); 
     } 
     selectResultSet.close(); 

在從HashMap中讀回時,它僅打印最後一行'n'次。HashMap被上一個值覆蓋

回答

3

你缺少的是 - row = new String[columnsNumber];在while循環中,它實際上會導致重寫數組對象值,並且您正在向HashMap添加相同的對象。

... 
while(selectResultSet.next()){ 
    row = new String[columnsNumber]; 
    for(int i=0;i<columnsNumber;i++){ 
     row[i] = selectResultSet.getString(i+1); 
    } 
    System.out.println(); 
    dataFromQuery.put(ctr++, row); 
} 
... 
+0

thanx一噸.... –

+0

你歡迎.... –

1

申報排陣while循環中,使每一行都有自己的拷貝,目前已在地圖上每一行都引用這是由最後一個循環覆蓋相同的排陣。