唯一约束是否包括null约束?
有一种情况是,一个属性cellPhone可以是NULL,但不能重复,所以我给出了两个约束:“null”和"unique",如果用户没有在字段中输入值,那么就可以更新记录,因此它会做出以下例外:
SEVERE: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: unique constraint (TEST1.OSQS_PARENTS_CELLPHONE_UK) violated在UPDATE的情况下,我该怎么办?
编辑这里是表ddl的定义
CREATE TABLE "TEST1"."OSQS_PARENTS"
( "PARENT_NO" NUMBER(38,0),
"PARENT_NAME" VARCHAR2(4000 BYTE),
"PARENT_ID" NUMBER(38,0),
"PARENT_EMAIL" VARCHAR2(30 BYTE),
"PARENT_CELLPHONE" NUMBER(38,0)
)下面是约束的图像

以下是更新语句
Parent aParent; //is an object I pass through a function
String SQlUpdate = "UPDATE OSQS_PARENTS P SET P.PARENT_ID=?,P.PARENT_EMAIL=?,P.PARENT_CELLPHONE=?"
+ " where P.PARENT_NO=?";
PreparedStatement pstmt = null;
try {
pstmt = con.prepareStatement(SQlUpdate);
pstmt.setLong(1, aParent.getId());
pstmt.setString(2, aParent.getEmail());
pstmt.setLong(3, aParent.getCellPhoneNo());
pstmt.setLong(4, parentNo);
pstmt.executeUpdate();
}发布于 2011-05-02 18:23:40
听起来是这样的:
cellPhone必须是唯一的。当用户不输入值时,将其标记为0。因此,当您尝试将多个0值插入“唯一”列时,它将失败。
我认为您需要删除列上的NULL约束(允许它是唯一的,是的,但允许NULL)。
然后,当用户没有输入任何值时,使用它作为一个no值(未知=空<> 0-0是一个已知值)。
在语句中抛出一个IF,如果值为您拥有的,则将其设置为空!\
pstmt.setNull(3, java.sql.Types.INTEGER);https://stackoverflow.com/questions/5860388
复制相似问题