2013-09-27 53 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循环中,使每一行都有自己的拷贝,目前已在地图上每一行都引用这是由最后一个循环覆盖相同的排阵。