我有一个显示图表的应用程序,该图表填充了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。
答案 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,但这里有一个sample和source cod e。如果按表格中的一行,您将获得保存/编辑数据的选项。