Android insertWithOnConflict возвращает неправильное значение - PullRequest
4 голосов
/ 29 декабря 2011

Я использую функцию insertWithOnConflict в Android / SQLite для вставки значений, которые потенциально уже существуют в базе данных.Согласно документации Android, если значение существует, будет возвращен первичный ключ:

Returns
the row ID of the newly inserted row OR the primary key of the existing row if 
the input param 'conflictAlgorithm' = CONFLICT_IGNORE OR -1 if any error 

Однако, при использовании этой функции, существующий первичный ключ не возвращается, если строка уже существует.Вместо этого он автоматически инкорпорирует первичный ключ и возвращает это значение, даже если в строку для возвращаемого идентификатора не вставлено никаких данных.

Сам вызов функции относительно прост:

name_id = db.insertWithOnConflict("names", null, name_values, SQLiteDatabase.CONFLICT_IGNORE);

Ответы [ 2 ]

1 голос
/ 05 февраля 2012

случилось со мной тоже. Я также видел еще несколько странных случаев, когда мне возвращали 0. Кажется, есть некоторая проблема на уровне API. Вернулись обратно, чтобы вставитьOrThrow, и это сработало для меня синус тогда.

0 голосов
/ 18 апреля 2013

Это известная ошибка (с 2010 года):
https://code.google.com/p/android/issues/detail?id=13045

И есть другие проблемы с этим API, например,
https://code.google.com/p/android/issues/detail?id=3302

Я думаю, что лучшее решение - просто избежать этого API (как предлагает Назгул).

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