Vaadin:将新项目提交到数据库(SQLContainer)

时间:2012-01-19 14:06:41

标签: java sql containers vaadin

我有一个显示图表的应用程序,该图表填充了SQL表中的数据。我正在寻找让用户“编辑”表格的可能性,以便他可以更改图表。今天我找到了Vaadin“SQLContainer”附加组件,这正是我所需要的。我能够连接到数据库并获得我需要的表并将其连接到Vaadin表,这样我就可以在Vaadin中看到一个数据库表。我已经阅读了很多次SQLContainer(更新的AdressBook教程)的Vaadin教程,但我仍然没有得到如何通过SQLContainer向DB提交内容。这是我到目前为止所得到的:

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 个答案:

答案 0 :(得分:3)

我看到你的查询只是“select * FROM table”。如果是这种情况,则应使用TableQuery而不是FreeformQuery。 TableQuery已经为您直接从单个SQL表填充容器的情况实现了所有读/写,排序,过滤等。

使用TableQuery,您应该能够以可编辑模式(setEditable)设置vaadin表,并且能够直接操作数据库中的值,通过调用container.commit()来存储它们,除非它被置于writeThrough和autoCommit模式中。或者您可以取一行表格(一个项目)并以Vaadin表格进行编辑。

如果您需要使用FreeformQuery(对于更复杂的查询,例如,加入两个或更多表),您需要自己实现写支持,如另一个答案中所述。有关此问题的简单示例,请查看the implementation of the DemoFreeformQueryDelegate以获取SQLContainer演示应用程序。

HTH

答案 1 :(得分:1)

当涉及到SqlContainer时,作者为您提供了以下信息

  

FreeformQuery模式允许您指定任何复杂的查询并拥有   它的结果填充了容器,但是你需要推动它   支持写入,排序,过滤和延迟加载   实现FreeformQueryDelegate接口。

我自己没有使用过SqlContainer,但这里有一个samplesource cod e。如果按表格中的一行,您将获得保存/编辑数据的选项。