2012-04-03 1 views
0

Я работаю на Android 2.3.3 приложения, которое использует SQLITE как DB.I я в настоящее время с помощью внутреннего ROWID в SQLite обновить мои строки и извлечение данных . Недавно я узнал, что внутренние ROWID меняются для моих строк в разы. Я не знаю причины этого. Проблема в том, что я кэширую этот ROWID, чтобы позже выполнить операцию обновления. Поэтому в случае изменения ROWID я могу обновлять неправильную строку.Проблем в кэшировании внутренней SQLITE ROWID в Android

Я думаю, что есть два решения.

(1) Не допускайте изменения внутреннего ROWID (что я не знаю, как добиться). Также может кто-то сообщить мне, что вызывает изменение ROWID?

(2) Определите колонку INTEGER PRIMARY KEY и используйте ее как ROWID.

Сообщите мне, если возможно предотвратить изменение ритма, иначе я приму второе решение.

Спасибо!

ответ

1

Для идентификатора строки вы должны использовать INTEGER PRIMARY KEY.

Можете ли вы опубликовать определение таблицы, которое вы используете сейчас? Значение, которое вы используете, не должно меняться, если вы не изменили его или b) вы каким-то странным образом определили его.

+0

Как я уже говорил я использую SQLite внутреннего ROWID – rogerstone

0

Я предполагаю, что это процесс, в вашем приложении, что сжать БД (вакуум), и это может изменить RowId, если есть делеции до этого компресс выполняет

+0

моих у приложения нет никаких процессов. Не знаю, есть ли внутренние ОС в ОС, которые это делают. – rogerstone

+0

Теперь я понимаю, что вы делаете. Вы должны прочитать документацию SQLite на внутреннем ROWID, чтобы узнать, относится ли это к вашей ситуации: http://www.sqlite.org/autoinc.html. Вы можете удалить строку с максимальным значением ROWID, что приведет к тому, что алгоритм ROWID будет вести себя непредсказуемым образом. –

Смежные вопросы