2015-06-10 2 views
0

Я пытаюсь добавить список массивов в другой список массивов и возвращать список конечных массивов. У меня 4 записи в таблице, когда я пытаюсь отобразить, первый набор записей всего 4 раза.Добавление списка массивов в другой arraylist

ArrayList<String> al = new ArrayList<String>(); 
    ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>(); 

    try 
    { 
     conn=com.sample.DBConnection.getDBConnection(); 
     String query= null; 
     query=com.sample.RRRConstants.REPORT_SUMMERY; 
     st = conn.createStatement(); 
     rs=st.executeQuery(query); 
     Map<String, Object[]> summ = new HashMap<String, Object[]>(); 

     while(rs.next()) 
     { 

      al.add(rs.getString("sched_id")); 
      al.add(rs.getString("sched_name")); 
      al.add(rs.getString("gen_date")); 
      al.add(rs.getString("gen_time")); 
      al.add(rs.getString("generated_by")); 
      al.add(rs.getString("gen_version")); 
      al.add(rs.getString("gen_status")); 
      list.add(al); 

     } 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 

Показано:

 ArrayList<ArrayList<String>> a1 =rs.getSummary(); 

    ArrayList<String> a2 = new ArrayList<String>(); 


    for (int i=0 ; i <a1.size() ; ++i) 
    { 
     a2 = a1.get(i); 
     System.out.println(i +" record "+a2.get(0)); 
     System.out.println(i +" record "+a2.get(1)); 
     System.out.println(i +" record "+a2.get(2)); 
     System.out.println(i +" record "+a2.get(3)); 
     System.out.println(i +" record "+a2.get(4)); 
     System.out.println(i +" record "+a2.get(5)); 
     System.out.println(i +" record "+a2.get(6)); 
    } 

ответ

4

Вы создаете один ArrayList<String>, и добавить ссылку на этот список ваших ArrayList<ArrayList<String>> несколько раз.

Вам нужно создать новый объект в вашего цикла, так что каждая итерация создает независимый список:

while(rs.next()) 
{ 
    ArrayList<String> al = new ArrayList<>(); 
    ... 
} 

Однако я бы рекомендовал не использовать ArrayList<String> для этого в любом случае - учитывая, что вы» у вас очень специфические поля, почему бы не создать свой собственный тип со свойствами для идентификатора расписания, имени графика и т. д.? С этим, вероятно, будет намного легче работать, чем с списком строк, в которых вы связываете каждый индекс с определенным значением.

1

Измени Оператор While и reinstantiate al как этот

while(rs.next()) { 
    ArrayList<String> al = new ArrayList<String>(); 
    al.add(rs.getString("sched_id")); 
    al.add(rs.getString("sched_name")); 
    al.add(rs.getString("gen_date")); 
    al.add(rs.getString("gen_time")); 
    al.add(rs.getString("generated_by")); 
    al.add(rs.getString("gen_version")); 
    al.add(rs.getString("gen_status")); 
    list.add(al); 
} 

В противном случае у вас есть только один экземпляр ArrayList, который содержит все, в то время как ваш UseCase требует один ArrayList для каждой петли.

0

Вы добавляете один и тот же список каждый раз в цикл. каждый раз создавайте новый список. например:

while(rs.next()) 
     { 
      ArrayList<String> al = new ArrayList<String>(); 
      al.add(rs.getString("sched_id")); 
      al.add(rs.getString("sched_name")); 
      al.add(rs.getString("gen_date")); 
      al.add(rs.getString("gen_time")); 
      al.add(rs.getString("generated_by")); 
      al.add(rs.getString("gen_version")); 
      al.add(rs.getString("gen_status")); 
      list.add(al); 

     } 
+0

Спасибо, это сработало :) :) – pooja

Смежные вопросы