2016-10-11 2 views
0

У меня есть класс результатов, который хранится во всех операциях запроса. Моя проблема в том, что я пытаюсь заполнить jtable с помощью данных набора результатов, но я могу отображать данные только в одном столбце, где у меня три. Это фрагмент из класса Resultset:Итерация 2D-массив ResultSet для JTable

public static List<List<String>> getAllFabrics() throws SQLException{ 
    sql = "SELECT * FROM fabric"; 

    List<List<String>> values = new ArrayList<>(); 
    List<String> id = new ArrayList<>(); 
    List<String> item = new ArrayList<>(); 
    List<String> supplier = new ArrayList<>(); 
    stmt = con.createStatement(); 
    rs = stmt.executeQuery(sql); 
    //metaData = rs.getMetaData(); 
    //int columnNum = metaData.getColumnCount(); 
    while(rs.next()){ 
     id.add(String.valueOf(rs.getInt("id"))); 
     item.add(rs.getString("ItemDesc")); 
     supplier.add(rs.getString("Supplier")); 

     } 
    values.add(id); 
    values.add(item); 
    values.add(supplier); 

    return values; 
} 

и это JTable метод, который я пытаюсь часами, чтобы решить:

public static DefaultTableModel loadTable(){ 
    ModelDB model = null; 
    DefaultTableModel tableModel = new DefaultTableModel(); 
    tableModel.addColumn("ID"); 
    tableModel.addColumn("Fabric"); 
    tableModel.addColumn("Supplier"); 

    try{ 
     List<String> id = model.getAllFabrics().get(0); 
     List<String> item = model.getAllFabrics().get(1); 
     List<String> supplier = model.getAllFabrics().get(2); 

     //System.out.println(model.getAllFabrics().size()); tableModel.addRow(new Object[]{subRow}); 
     for(List<String> row:model.getAllFabrics()){ 
      tableModel.addRow(new Object[]{id,item,supplier}); 
     } 


    }catch(SQLException ex){ 
     ex.printStackTrace(); 
    } 
    return tableModel; 
} 

Я не могу найти способ для перебора значений в отобразите их в соответствующей колонке.

+0

Скорее всего, что списку colums формирования, попробуйте формирование списка строки данных мудрого и итерацию и отображать данные в JTable –

+0

Вместо того, чтобы формировать столбец данных мудрого, форма список строк мудрые, а затем итерации и отображения данных в JTable –

ответ

1

Оригинальный ответ

Вы почти там! Вам нужно всего лишь изменить цикл:

for(int i = 0; i < id.size(); i++) { 
    tableModel.addRow(new Object[] {id.get(i),item.get(i),supplier.get(i)}); 
} 

Но, как говорится в комментарии, вы должны рассмотреть вопрос об изменении в массиве строк, а не столбцов.

Редактировать

Это один подход. Это в основном так же, как ваш код, за исключением строк/столбцов перепутанных поэтому метод возвращает список строк, а не столбцов:

public static List<List<String>> getAllFabrics() throws SQLException{ 
    sql = "SELECT * FROM fabric"; 
    List<List<String>> values = new ArrayList<>(); 
    stmt = con.createStatement(); 
    rs = stmt.executeQuery(sql); 
    while(rs.next()){ 
     List<String> row = new ArrayList<>(); 
     row.add(String.valueOf(rs.getInt("id"))); 
     row.add(rs.getString("ItemDesc")); 
     row.add(rs.getString("Supplier")); 
     // Now row contains {id, item, supplier} 
     values.add(row); 
    } 
    return values; 
} 

Затем в loadTable) изменение метода (к:

... 

try{ 
    for(List<String> row: model.getAllFabrics()){ 
     tableModel.addRow(row.toArray(new String[row.size()]); 
    } 
... 

В исходном коде вы вызываете model.getAllFabrics() несколько раз, чтобы получить возвращаемое значение. Это не хорошо, потому что каждый раз, когда вы делаете вызов, вызывается, и ему нужно снова выполнить запрос SQL и т. Д. Вместо этого сохраните возвращаемое значение в переменной. В этом случае, хотя, поскольку возвращаемое значение доступно только после того, как вы можете в равной степени выполнять действия, описанные выше.

Надеется, что это помогает :)

+0

Я не знаю, как и это первый раз, когда я работаю с java, потому что мой последний проект был в php. – SilverRay

+0

Спасибо, что это сработало, но я ценю, могу ли вы опубликовать информацию о том, как создать массив строк. – SilverRay

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