2012-06-15 2 views
0

У меня есть база данных с одного столбца и создать его как этотИзбегайте повторяющихся строк в базе PhoneGap

function populateDB(tx){ 
    tx.executeSql('CREATE TABLE IF NOT EXISTS RESULT(result, UNIQUE(result))'); 
} 

однако, когда я хочу писать объекты в таблицу, я получаю ошибку:

could not execute statement (19 constraint failed)

Ошибка появляется, когда я добавляю NOT NULL и PRIMARY KEY к настройке. Без него он продолжает писать дубликаты в моей базе данных (я заполняю базу данных данными из веб-службы при запуске приложения iOS для телефонных разговоров, поэтому я хочу поймать повторяющиеся строки на уровне базы данных)

Сначала у меня был только «ПЕРВИЧНЫЙ KEY ", и поскольку ошибка говорит что-то о ограничениях, я предполагал, что первичный ключ должен быть« NOT NULL », добавив его в код, я все равно получаю ту же ошибку.

как я могу это решить. заранее спасибо

Редактировать: Может быть, вам важно знать, что я пишу stringyfied объекты JSON в столбец результатов.

Редактировать: Я вставляю объект в эту функцию. В принципе я это делаю один за другим:

this.save = function(){ 
    db.transaction (function(transaction){ 
     object = $.toJSON(self); 
     object = encodeURI(object); 
     transaction.executeSql('INSERT INTO RESULT (result) VALUES ("'+object+'")'); 
     }, 
     errorCB, 
     successCB 
    ); 
} 

редактировать: Я обновил свой настроить код таблицы. Ошибка не возникает в каждой строке, но объекты на самом деле уникальны.

+0

'ОСНОВНОЙ KEY' навязывает' UNIQUE CONSTRAINT'. Таким образом, это ограничение, с которым вы сталкиваетесь с дубликатами. Однако, чтобы решить вашу проблему, нам нужно знать, как вы вставляете свои данные. Одна строка за раз, объемная вставка, из другой таблицы и т. Д. И т. Д.? – MatBailie

+0

19 Это какой-то рекорд? : P –

+0

вы упали и воссоздали свою таблицу после внесения изменений в определение? Ошибка нарушения ограничений 19 в основном служит вашей цели, генерируя ошибку для данных, которые уже есть в таблице. – dhaval

ответ

0

«ЕСЛИ НЕ СУЩЕСТВУЕТ» - это улов здесь. Вы получаете ограничение при использовании в SQLite-запросах таких условий, как «ЕСЛИ НЕ СУЩЕСТВУЕТ» или «ЗАМЕНИТЬ», «IGNORE» и т. Д.

Предположим, вы пытаетесь создать таблицу, которая уже существует, тогда ограничение (здесь, не создавая таблицу снова, если оно уже существует) терпит неудачу и, следовательно, запрос выходит из строя (что вы действительно хотите - вы не хотите дублировать таблицы справа?) и дает вам ошибку с ошибкой.

Вы можете получить подобную ошибку на INSERT или REPLACE, INSERT или ИГНОРИРУЙТЕ, и т.д. ...

Смежные вопросы