Ваадин: добавление новых предметов в базу данных (SQLContainer) - PullRequest
1 голос
/ 19 января 2012

У меня есть приложение, которое отображает диаграмму, которая заполнена данными из таблицы SQL.Я искал возможность позволить пользователю "Редактировать" таблицу, чтобы он мог изменить Диаграмму.Сегодня я нашел дополнение Vaadin "SQLContainer", которое именно то, что мне нужно.Мне удалось подключиться к базе данных, получить нужную таблицу и подключить ее к таблице Vaadin, чтобы я смог увидеть таблицу базы данных внутри Vaadin.Я несколько раз читал учебник Vaadin для SQLContainer (обновлённый учебник по AdressBook), но до сих пор не понимаю, как что-то передать в БД через SQLContainer.Вот что у меня получилось:

public void displayTable(){ 
    try {
        connectionPool = new SimpleJDBCConnectionPool(
                "org.postgresql.Driver",
                "jdbc:postgresql://localhost:5432/database", "username", "password", 2, 5);
        FreeformQuery query = new FreeformQuery("select * FROM table", connectionPool);
        container = new SQLContainer(query);
        container.addListener(new QueryDelegate.RowIdChangeListener() {
            public void rowIdChange(RowIdChangeEvent event) {
                System.err.println("Old ID: " + event.getOldRowId());
                System.err.println("New ID: " + event.getNewRowId());
            }
        });
    } catch (SQLException e) {
          e.printStackTrace();
    }
    table= new Table("Table",container);
    table.setSelectable(true);
    table.addListener(this);
    window.addComponent(table);
    }

}

Я работаю с Vaadin версии 6.6.6 и использую PostgrSQL.

Ответы [ 2 ]

3 голосов
/ 23 января 2012

Я вижу, что ваш запрос просто "выбрать * из таблицы".Если это так, вы должны использовать TableQuery вместо FreeformQuery.В TableQuery уже реализованы все операции чтения / записи, сортировки, фильтрации и т. Д. Для случая, когда вы заполняете контейнер напрямую из одной таблицы SQL.

Используя TableQuery, вы сможете установить таблицу vaadin в редактируемойmode (setEditable) и иметь возможность напрямую манипулировать значениями в базе данных, сохраняя их, вызывая container.commit (), если только он не переведен в режимы writeThrough и autoCommit.Или вы можете взять одну строку таблицы (один элемент) и отредактировать ее в форме Vaadin.

Если вам нужно использовать FreeformQuery (для более сложных запросов, например, для соединения двух или более таблиц), вам необходимо реализоватьпиши поддержи себя, как уже говорилось в другом ответе.В качестве простого примера рассмотрим реализацию DemoFreeformQueryDelegate для демонстрационных приложений SQLContainer.

HTH

1 голос
/ 23 января 2012

Когда дело доходит до SqlContainer, автор предоставляет вам следующую информацию

Режим FreeformQuery позволяет указать любой сложный запрос и иметь его результаты заполняют контейнер, однако вам нужно поддержка записи, сортировки, фильтрации и отложенной загрузки реализация интерфейса FreeformQueryDelegate.

Я сам не использовал SqlContainer, но вот семпл и исходный код e. Если вы нажмете строку в таблице, вы получите возможность сохранить / отредактировать данные.

...