Oracle нулевое и уникальное ограничение - PullRequest
1 голос
/ 02 мая 2011

Включает ли уникальное ограничение ненулевое ограничение?

У меня есть случай, когда один атрибут cellPhone может быть NULL, но не может повторяться, поэтому я даю ему 2 ограничения: «не ноль» и «уникальный», в случае обновления записи, если пользователь не сделал не вводите значение, которое я поставил 0 в поле, поэтому оно делает следующее исключение:

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

Что мне делать в UPDATE случае?

EDIT вот определение таблицы 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 Ответ

3 голосов
/ 02 мая 2011

звучит так:

мобильный телефон должен быть уникальным.Когда пользователь не вводит значение, вы помечаете его как 0. Таким образом, происходит сбой при попытке вставить несколько значений 0 в столбец «УНИКАЛЬНЫЙ».

Я считаю, что вам нужно удалить ограничение NOT NULL настолбец (допустим, чтобы он был УНИКАЛЬНЫМ да, но разрешить NULLS).

Затем, когда пользователь не вводит никакого значения, используйте его в качестве значения NO (unknown = null <> 0 - 0 является известным значением)

добавьте IF в ваше утверждение, если значение то, что у вас есть, в противном случае SET IT TO NULL! \

pstmt.setNull(3, java.sql.Types.INTEGER);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...