在sqlcontainer-Vaadin中更改属性时发生java.sql.SQLIntegrityConstraintViolationException
您好,我在尝试更改sql容器中新添加项的属性时遇到了SQLIntegrityConstraintViolationException。我有一张非常简单的桌子:在sqlcontainer-Vaadin中更改属性时发生java.sql.SQLIntegrityConstraintViolationException,java,sql,vaadin,hsqldb,Java,Sql,Vaadin,Hsqldb,您好,我在尝试更改sql容器中新添加项的属性时遇到了SQLIntegrityConstraintViolationException。我有一张非常简单的桌子: CREATE TABLE person( id int not null primary key, name varchar(30), surname varchar(30), age int ) 我试图一个接一个地设置所有属性,但在第一次完成(id)之后,下一个属性最终会抛出一个exeption: java.sql.SQLIntegr
CREATE TABLE person(
id int not null primary key,
name varchar(30),
surname varchar(30),
age int
)
我试图一个接一个地设置所有属性,但在第一次完成(id)之后,下一个属性最终会抛出一个exeption:
java.sql.SQLIntegrityConstraintViolationException: integrity constraint violation: unique constraint or index violation; SYS_PK_10096 table: PERSON
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.executeUpdate(Unknown Source)
at com.vaadin.data.util.sqlcontainer.query.TableQuery.executeUpdateReturnKeys(TableQuery.java:588)
at com.vaadin.data.util.sqlcontainer.query.TableQuery.storeRow(TableQuery.java:284)
at com.vaadin.data.util.sqlcontainer.SQLContainer.itemChangeNotification(SQLContainer.java:1069)
at com.vaadin.data.util.sqlcontainer.ColumnProperty.setValue(ColumnProperty.java:207)
at slawek.MyVaadinUI.init(MyVaadinUI.java:93)
at com.vaadin.ui.UI.doInit(UI.java:610)
代码如下:
FormLayout form = new FormLayout();
TextField idTextField = new TextField("Id");
TextField nameTextField = new TextField("Name");
TextField surnameTextField = new TextField("Surname");
TextField ageTextField = new TextField("Age");
Button submit = new Button("Add user");
form.addComponents(idTextField, nameTextField, surnameTextField, ageTextField, submit);
layout.addComponent(form);
Item item = container.getItem(container.addItem());
container.setAutoCommit(true);
Property propertyId = item.getItemProperty("ID");
Property propertyName = item.getItemProperty("NAME");
Property propertySurname = item.getItemProperty("SURNAME");
Property propertyAge = item.getItemProperty("AGE");
propertyId.setValue(3);
propertyName.setValue("someName"); // line number 93
propertySurname.setValue("someSurname");
propertyAge.setValue(51);
在数据库中,我所能看到的只是添加了一个仅设置了id号的新行。其余字段为空。
我做错了什么?您可以通过将下面的行分成两行来检查情况,并在修改它们之前检查container.addItem()返回的对象的字段。若对象的ID的其余字段为null,则不应使用proertyId.setValue(3),因为这已经设置好了
Item item = container.getItem(container.addItem());
问题是,在我发布我的问题的那天,它不起作用,但就在第二天,我成功地启动了它,它毫无问题地启动了。也许是eclipse或hsqldb的问题?不管怎么说,从那以后,一切正常