Android insertWithOnConflict возвращает неправильное значение

Я использую функцию 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); 

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

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

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

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

Intereting Posts
Android: Как начать работу в фоновом режиме Возможно ли запустить диалоговое окно «Диалог» из «Предпочтения» в «Предпочтение»? Альтернатива PreferenceFragment для API совместимости с Android? Изменение ориентации экрана планшета – нет Просмотр найденного для id для фрагмента Как преобразовать Drawable в int и наоборот в Android Сбой приложения в эмуляторе при загрузке собственной общей библиотеки, но отлично работает на физическом устройстве Что означает «@ + android: id / title»? В appcelerator / titanium mobile при использовании локального html в веб-представлении, как мне загрузить образ и ссылку в каталог данных приложения Не удалось выполнить тестовый прогон: сбой инструментария из-за «java.lang.ClassNotFoundException» Отображение MapView с отсутствующими фрагментами с «x» в центре Проект библиотеки андроидов: R.id не может быть разрешен или не является полем Невозможно переопределить метод startElement Import android.support.wearable не может быть разрешен Текст (шрифт) выглядит увядшим с более старым apis Выбран список всех списков Android