Oracle null和唯一约束

时间:2011-05-02 17:34:51

标签: database oracle constraints

唯一约束是否包含非空约束?

我有一个案例,一个属性cellPhone可以是NULL但不能重复,所以我给它2个约束:“not null”和“unique”,在更新记录的情况下,如果用户没有输入值,我在字段中输入0,因此它会出现此异常:

 SEVERE: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: unique constraint (TEST1.OSQS_PARENTS_CELLPHONE_UK) violated

我应该在UPDATE案例中做些什么?

修改 这是table 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)
)

这是约束的图像 enter image description here

这是更新声明

    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();
    }

1 个答案:

答案 0 :(得分:3)

听起来像这样:

cellPhone必须是唯一的。当用户没有输入值时,将其标记为0.因此,当您尝试将多个0值插入“UNIQUE”列时,它会失败。

我相信你需要在列上删除NOT NULL约束(允许它是UNIQUE yes,但允许NULLS)。

然后当用户没有输入任何值时,将其用作NO值(unknown = null<> 0 - 0是已知值)

在你的陈述中抛出一个IF,如果值是你所拥有的,否则将它设置为NULL!\

pstmt.setNull(3, java.sql.Types.INTEGER);