Добавление Java в ArrayList <String>и последующее преобразование в Object [] [] - PullRequest
0 голосов
/ 25 января 2019

Впервые в Java, вот так:

Я хочу взять мой arrayList , который я заполнил, выполнив это:

ar.add (rs.getString (у));

Который производит что-то вроде этого:

значение1, значение2, значение3, ...

И вернуть это так:

return (Object[][]) ar.toArray();

or

String[][] res = new String[ar.size()][];
return ar.toArray(res);

Хотя это, кажется, просто ставит Null, Null, Null через все это.

Когда он заполняется через ar.add (...) , я проверяю, есть ли у него данные (, и он имеет ).

Все это так, чтобы я мог создать таблицу :

TableModel model = new EditableTableModel(columnTitles, dataEntries);

dataEntries являющийся объектом [] [] , в котором он нуждается.

оригинальный dataEntries код был:

 Object[][] dataEntries = {
     { "value1", "value2", "value3", "value4", "value5", "value6", "value7" },
     { "value1", "value2", "value3", "value4", "value5", "value6", "value7" },
     etc...
 };

Который работал просто отлично при первом тестировании. Эти значения отображаются в jTable , как и должно быть.

Это мой полный код:

private void initialize() throws Exception {
    [more code here]
    Object[][] dataEntries = reloadData();
    TableModel model = new EditableTableModel(columnTitles, dataEntries);
    table = new JTable(model);
    [more code here]
}

@SuppressWarnings("unchecked")
private Object[][] reloadData() throws Exception {      
    SQLiteJDBCLoader.initialize();
    ArrayList<String> ar = new ArrayList<String>();
    SQLiteDataSource dataSource = new SQLiteDataSource();
    dataSource.setUrl(dbPath);

    try {
        ResultSet rs = dataSource
                      .getConnection()
                      .createStatement()
                      .executeQuery("Select "
                                    + "data_script, "
                                    + "data_status, "
                                    + "data_errors, "
                                    + "data_tester, "
                                    + "data_rundate, "
                                    + "data_tools, "
                                    + "ID "
                                  + "FROM allData");

        int row = 5;
        int col = 6;

        while (rs.next()) {
            for (int x = 1; x < row; x++) {
                for (int y = 1; y < col; y++) {
                    ar.add(rs.getString(y));
                }
            }
        }            
    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, ex);
    }

    return  (Object[][]) ar.toArray();
}

Что я мог делать не так?

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Как хороший (ИМХО) общий совет, никогда не используйте массивы, если в этом нет особой необходимости;всегда используйте Коллекции.Массивы "высокого уровня обслуживания";неудобно и не играйте с дженериками.

Измените свой метод, чтобы получить List из List, и ваша жизнь станет проще.Что-то вроде:

public List<List<String>> getTable() {
    List<List<String>> result = new ArrayList<>();
    for (<every row>) {
        List<String> row = new ArrayList<>();
        // populate row
        result.add(row);
    }
    return result;
}
0 голосов
/ 25 января 2019

ArrayList.toArray () возвращает Object [].В то время как вы ожидаете двухмерный результат, созданный вами ArrayList является 1-мерным.Попробуйте использовать Datastructure, например

List<List> or List<Object[]> 

Пример должен выглядеть следующим образом:

    List<Object[]> arr=new ArrayList<Object[]>();

       while (rs.next()) {
         Object[] temp=new Object[col];
          for (int i = 0; i < col; i++) {

               String columnValue = rs.getString(i);
               temp[i]=columnValue;
           }
       arr.add(temp);

          }    
 return arr.toArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...