2013-07-16 2 views
0

В моем приложении у меня есть возможность полностью сбросить приложение (удалить все данные/настройки, которые они установили), так что я сделал, когда они выбирают сброса, чтобы сделать Удал.вс в ContentProviderДобавьте столбец sqllite в существующую базу данных или измените индекс базы данных при удалении

, например

getActivity().getContentResolver().delete(CalEvents.CONTENT_URI, null, null); 

Делая это, я думал, что база данных в настоящее время очистили бы запустить счетчик ID обратно на 1, но это явно не тот случай

Проблема в том, что один из м y таблицы использовали базу данных id 1-16 для поиска данных, но когда эта таблица будет удалена, следующая вставка для этой базы данных будет 17-33, и это вызывает проблемы, потому что я ищу числа 1-16, поэтому он никогда не будет отображать данные.

Итак, часть 1 моего вопроса заключается в возможности переустановки таблицы после того, как я сделаю массовое удаление из нее? Я угадываю, но я не знаю ответа.

Если это невозможно, как я могу поместить обновление в приложение, где я могу добавить столбец в таблицу without, удалив данные, когда он будет добавлен? В настоящее время я могу увеличить версию базы данных, и столбец будет добавлен, но он удалит все мои данные, когда приложение обновится, и я не хочу, чтобы

ответ

1

В соответствии с руководством пользователя SQLite here вы можете повторно проиндексировать свое поле автодефицирования, удалив его запись в таблице sqlite_sequence выглядит следующим образом:

delete from sqlite_sequence where name='<Your Table Name Here>'; 

Я не делал этого сам, но он должен работать.

Редактировать

Не ясно, в руководстве SQLite, что запись вашей таблицы будет создана заново каждый раз, когда новая прошивка происходит, однако четко сказано, что вы можете обновить sqlite_sequence. Так что, если удаление не решить вашу проблему, вы можете попробовать обновить индекс, как это:

update sqlite_sequence set seq = 0 where name='<Your Table Name Here>'; 

Надеется, что это помогает ...

+0

Я попробовал: «database.execSQL (" обновление sqlite_sequence набор сл = 0 где name = "+ table +" "); ' и это не сработало –

+1

@ LuisAlberto Извините за долгую задержку, но я только что видел ваш комментарий, кажется, что вам не хватает одиночных кавычек (') вокруг имени вашей таблицы ... – Christos

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