java - 瓦丁 : commit new Items to Database (SQLContainer)

标签 java sql containers vaadin

我有一个显示图表的应用程序,图表中填充了来自 SQL 表的数据。我一直在寻找让用户“编辑”表格的可能性,以便他可以更改图表。今天我找到了 Vaadin“SQLContainer”插件,这正是我所需要的。我能够连接到数据库并获取我需要的表并将其连接到 Vaadin 表,这样我就可以在 Vaadin 中看到一个数据库表。我已经多次阅读 SQLContainer 的 Vaadin 教程(更新的 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。

最佳答案

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

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

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

HTH

关于java - 瓦丁 : commit new Items to Database (SQLContainer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8927405/

相关文章:

java - 推土机 5.3.2。以编程方式设置自定义转换器?

java - 尝试获取屏幕上绘制的每个随机圆圈的 x、y 坐标

java - 为 Derby DB 使用 PreparedStatement 时出现 SQLException

sql - Mysql多对多计数和数学

MySQL Couting 重复项的重复项

c++ - 使用静态 std::vector 类成员时发生访问冲突

java - GET 请求正文中的 RESTful Web 服务和 JSON 文档

c++ - 何时使用 C++ forward_list

c++ - 通过在 C++ 中单独直接访问其迭代器来删除容器的元素

任何单词的java正则表达式