Заполнение TableView данными из базы данных. Не удалось установить строки

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

Когда я пытаюсь добавить строки, я обнаруживаю, что в мое табличное представление не было добавлено никаких данных, я пытаюсь добавить строки из массива строк, представляющих одну строку. Я понятия не имею, сколько столбцов и т. Д. Будет запрашивать пользователь с помощью своего запроса и как большая таблица, поэтому я не могу создать объект строки и все свойства, которые представляют каждый столбец.

Вопрос Как мне заполнить мой табличный вид строками, которые я успешно извлек из базы данных в формате String [] каждой строки.

 private ObservableList<String[]> dataRows=FXCollections.observableArrayList();

Получить строки .. (работает отладка печатает все данные правильно)

while (this.resultSet.next()) {

        for (int i = 1; i < this.resultSetMd.getColumnCount() + 1; i++) {
            rows.add(resultSet.getString(i));

        }
        dataRows.add(rows.toArray(new String[rows.size()]));
        rows.removeAll(rows);

        //TODO DELETE row debugger debug
        dataRows.forEach((r)->{
            System.out.println("Row---------");
            for(String s:r){
                System.out.println("Debug row value- "+s);
            }
    });

Добавление в таблицу

  private void populateTable() {
            dpcontroller.tableView.getColumns().addAll(columns); //columns work

            dpcontroller.tableView.setItems(dataRows); //no data entered

        }

РЕДАКТИРОВАТЬ - РАБОЧИЙ КОД ПОСЛЕ ОТВЕТА

Рабочий код для людей, которые столкнутся с той же проблемой, что и я. Только необходимая фабрика действительно была ValueFactory. Вот два моих метода

  private void populateTable() {
            for (int rowNumber = 0; rowNumber < dataRows.size(); rowNumber++) {
                for (TableColumn tc : columns) {

                    tc.setCellValueFactory(new ValueFactory(columns.indexOf(tc),rowNumber));
                    dpcontroller.tableView.getColumns().add(tc);
                }
            }
            dpcontroller.tableView.setItems(dataRows);

        }
        private class ValueFactory implements Callback {

            private int rowNumber;
            private int columnNumber;

            public ValueFactory(int columnNumber, int rowNumber) {
                this.columnNumber = columnNumber;
                this.rowNumber = rowNumber;
            }

            @Override
            public Object call(Object o) {
                SimpleStringProperty stringProperty = new SimpleStringProperty(dataRows.get(rowNumber)[columnNumber]);
                return stringProperty;
            }
        }

Ответы на вопрос(1)

Ваш ответ на вопрос