SQLite создать таблицу с уникальной комбинацией столбцов - PullRequest
3 голосов
/ 29 марта 2012

Я просмотрел несколько сайтов на предмет полезной документации и оказался пустым. Блок-схемы с официального сайта также могут быть греческими, и примеры, которые я пробовал из других соответствующих постов на этом сайте, привели меня к ошибкам. Я пишу простое приложение для размещения пользовательского ввода в базе данных, однако мне нужно сочетание из 2 столбцов, чтобы быть уникальным . Из того, что я видел, это можно сделать с помощью UNIQUE или PRIMARY KEY. Мне также нужен какой-то способ зафиксировать ошибку, чтобы сообщить пользователю, что его ввод неверен . Я знаю, что я могу сделать это на стороне Java достаточно легко, но я бы предпочел не циклически просматривать таблицу при каждой предложенной вставке.

Это то, что я имею до сих пор:

db.execSQL("CREATE TABLE inventory (category TEXT, itemNum TEXT, quantity INTEGER, price REAL, image INTEGER, UNIQUE(category, itemNum) ON CONFLICT FAIL;");

Таблица построена правильно, пока я не добавил UNIQUE ...

Который бросил: ОШИБКА / SQLiteOpenHelper (1037): android.database.sqlite.SQLiteException: near ";": синтаксическая ошибка: инвентаризация CREATE TABLE (категория TEXT, itemNum TEXT, количество INTEGER, цена REAL, изображение INTEGER, CONSTRAINT unq UNIQUE (категория, itemNum) В случае конфликта;

EDIT:

... заполните Значения ContentValues ​​ с пользовательским вводом.

try{
db.getWritableDatabase().insert(DatabaseHelper.TABLE_NAME, DatabaseHelper.CATEGORY, values);
fillItemNumbers();  // Updates screen       
}
catch(SQLiteConstraintException e)
{
Toast
.makeText(this, "User error",Toast.LENGTH_LONG)
.show();            
}

1 Ответ

2 голосов
/ 29 марта 2012

Вы не соответствовали скобкам. Там должно быть еще ) после FAIL.

После того, как вы отсортировали это, вы можете поймать исключение, которое происходит, когда ограничение нарушено.

try {
    // insert new data
} catch (SQLiteConstraintException e) {
    Toast.makeText(context, 
                   "The combination of A and B must be unique",
                   Toast.LENGTH_LONG).show();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...