Ошибка SQLite: Сбой ограничения - PullRequest
0 голосов
/ 05 августа 2011

У меня общая проблема, и я рассмотрел несколько решений, но не нашел решения, подходящего для этого случая.

У меня есть временная таблица, которая определяется следующим образом:

public static final String GROUP_TABLE_CREATE =
         "CREATE TEMP TABLE "+GROUP_TABLE_NAME+" ("
         +GROUP_ID_COLUMN_NAME+" INTEGER PRIMARY KEY AUTOINCREMENT, "
         +GROUP_GROUP_ID_COLUMN_NAME+" INTEGER NOT NULL UNIQUE, "
         +GROUP_COLUMN_NAME+" VARCHAR(64) NOT NULL)";

Таблица создана без проблем. Затем я загружаю некоторые данные для вставки в него и использую следующий запрос для вставки:

ContentValues contentValues = new ContentValues();
contentValues.put(WhereWolfOpenHelper.GROUP_GROUP_ID_COLUMN_NAME, groupID);
contentValues.put(WhereWolfOpenHelper.GROUP_COLUMN_NAME, groupName);
db.insert(WhereWolfOpenHelper.GROUP_TABLE_NAME, null, contentValues);

И тогда я получаю следующую ошибку:

08-05 08:52:37.791: ERROR/Database(847): Error inserting group_name=Friends group_id=2
08-05 08:52:37.791: ERROR/Database(847): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed

Ошибка появляется дважды , и единственными данными в базе данных является группа с именем Friends (должно быть еще две записи).

У меня есть еще одна таблица с очень похожим кодом, которая работает без каких-либо проблем, поэтому я предполагаю, что это просто глупая ошибка, которую я не заметил. У кого-нибудь есть идеи?

Ответы [ 3 ]

0 голосов
/ 05 августа 2011

Если «ограничение не удалось», то что-то в схеме таблицы должно сказать нам, что не так. Я вижу, что он показывает данные, что он хочет вставить, это означает, что ограничение NOT NULL в порядке. В этом случае у меня есть только одно предположение, что вы уже вставили некое ограничение GROUP_GROUP_ID_COLUMN_NAME со значением 2 и UNIQUE из-за этого.

0 голосов
/ 18 мая 2012

Вы не должны передавать нулевые значения в методе вставки. Передайте пустые строки.

0 голосов
/ 05 августа 2011

Вы используете временную таблицу специально?Временная таблица умирает, когда соединение с БД закрыто.В этом случае таблица будет создана, и вставка не будет соответствовать какой-либо таблице.Таким образом, ограничение 19 может соответствовать «Таблица не найдена»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...