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”次。

4

2 回答 2

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);
}
...
于 2013-09-27T09:54:12.737 回答
1

在 while 循环中声明行数组,以便每一行都有自己的副本,目前 map 中的每一行引用相同的行数组,该行数组被最后一个循环覆盖。

于 2013-09-27T09:55:58.950 回答