Базу данных в GlazedList / Jtable, а затем отредактируйте базу данных с помощью GlazedList / JTable

StackOverflow https://stackoverflow.com/questions/2139919

Вопрос

Я могу разбить эту проблему на два вопроса:

  1. Каков наилучший способ поместить содержимое базы данных (MS-Access) в GlazedList/JTable?
  2. Как мне убедиться, что какие-либо изменения внесены в GlazedList/JTable отражены ли они в базе данных (MS-Access)?

Вот то, что я знаю:

  1. Я знаю, как получить/манипулировать информация из базы данных, используя в Метод JDBC.
  2. Я знаю это GlazedList's требуют отражения, поэтому мне нужно было бы создать класс, содержащий каждый столбец / поле в базе данных.Это не очень расширяемо...

Каков наилучший способ решения этой проблемы?

Редактировать:// Мне удалось создать генератор классов.Он принимает заголовки столбцов и создает поле экземпляра.Это должно решить проблему №2 http://pastebin.ca/1770996 - Это создает класс, но я не думаю, что правильно использовал отражение...редактировать 2:// Отредактировал мой код выше, чтобы он работал... http://pastebin.ca/1776722

Это было полезно?

Решение

У меня была очень похожая проблема, и я думаю, что мой результат тоже был похож, за исключением того, что он не нуждался в отражении (статическая схема БД).Вам нужно создать объекты row для каждой строки (которые могут просто включать номер строки и ссылки на результирующий набор и информацию о столбце).

Затем напишите ca.odell.glazedlists.gui.WritableTableFormat реализация для сопоставления этих объектов с ячейками таблицы.

Чтобы избежать проблем с # 2, вы можете создать гибкий класс строк, который извлекает информацию о столбце один раз из результирующего набора и кэширует ее для повторного использования.

Редактировать:Я нашел оригинальную и более простую реализацию (довольно простую), на которой была основана моя.Вы можете просмотреть его здесь: Таблица результирующего набора.Этого может быть достаточно для ваших целей.Затем вы добавляете это в реализацию AbstractTableModel, предоставленную по ссылке.

public void setValueAt(Object ob, int row, int column) throws SQLException {
    resultSet.absolute(r+1);
    if (ob == null) {
        resultSet.updateNull(column+2);
    } else {
        resultSet.updateObject(column+2,ob);
    }
    rs.updateRow();
    this.fireTableCellUpdated(row,column);  
}
public boolean isCellEditable(int row, int col) {
    return true;
}

Однако здесь есть три подвоха:ваш результирующий набор должен быть обновляемым, поддерживать прокрутку в обоих направлениях и быть чувствительным к обновлениям базы данных.Они являются частью спецификации JDBC, но не все драйверы поддерживают их, и вам нужно убедиться, что ваш результирующий набор создан с их включением.В этом случае вы просто делаете this.fireTableDataChanged() периодически для принудительного полного обновления данных таблицы.Это не самый быстрый подход, но он действительно работает.


Редактировать 2:Другой подход

Как насчет использования одной из библиотек объектно-реляционного картографирования, а затем выполнения ca.odell.glazedlists.gui.WritableTableFormat как я предложил выше?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top