Android SQLiteDatabase — неверный результат insertWithOnConflict?

И снова у меня вопрос про андроид. Пытаюсь заполнить небольшую базу. Есть простенькая таблица типа (id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, UNIQUE (name) ON CONFLICT IGNORE). Проверял в обычном sqlite3 — все работает как надо, дубликаты не вставляются.

В андроиде пытаюсь выполнить insertWithOnConflict(… INGORE) чтобы либо вставить новую запись, либо получить номер существующей. Но метод возвращает совершенно левые номера (похоже на ближайший свободный ключ, но уверенности нет). При этом реальной вставки не происходит. В итоге я получаю ключ, который не только бесполезен, но и вреден — я никогда не уверен, что он действительно ссылается на какую-то запись.

Это я что-то не так делаю или глюк в API? Гугл на эту тему говорит немного, но упоминания о глюке встречаются. Это ж стыдища-то какая… И что мне теперь с этим делать? Конечно, можно сначала сделать select, но очень уж не хочется — тормозить же будет. :(

P.S. И чтобы два раза не вставать: можно ли в андроиде сделать prepared select? Пока нашел только SQLiteStatement, но оно для выборки, вроде, не подходит. Или придется каждый раз парсерить запрос заново?
  • Вопрос задан
  • 2517 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы