База данных SQLite и логика доступа к данным - PullRequest
2 голосов
/ 30 августа 2010

Проблема:

Мне нужно создать несколько таблиц для кэширования некоторого количества текстовых данных, полученных путем чтения XML. Эти таблицы нужно создавать только один раз - при первом запуске приложения. Данные в таблицах должны быть очищены после определенного периода времени. Должен быть класс, доступный для других классов, которые позволили бы операции CRUD с этой базой данных.

Google нашел мне несколько ссылок на учебники по созданию баз данных и логике доступа к данным.

У меня есть несколько вопросов, пожалуйста, помогите:

  1. Сколько классов DataBaseHelper (DBAdapter) я должен иметь, я предполагаю только один? Можно ли использовать все операторы SQL DDL и DML, имя базы данных, имена таблиц как статические строки этого класса?
  2. Как сделать так, чтобы таблицы создавались только один раз?
  3. Можно ли очистить базу данных через фиксированный интервал времени?
  4. Существуют ли передовые практики, которым необходимо следовать при проектировании базы данных?
  5. Данные в базе данных должны отображаться в списках. У меня есть данные в ArrayLists (созданные при разборе XML), а также базы данных (после того, как эти списки сохраняются). Какой адаптер я должен использовать для резервного копирования списка? Должен ли я использовать ListAdapter или CursorAdapter?

Спасибо.

Ответы [ 2 ]

1 голос
/ 02 сентября 2010

Самый простой подход в этом случае - придерживаться ContentProviders .Они позволяют вам полностью отделить логику, связанную с БД (настройка таблиц БД, управление обновлениями БД, операции CRUD) от остальной части приложения.

Вместо того, чтобы переписывать ее здесь, я свяжу вас с постом.Я сделал здесь по такому вопросу: Подход к проектированию доступа к базе данных Android

Данные в базе данных должны отображаться в списках.У меня есть данные в ArrayLists (созданные при разборе XML), а также базы данных (после того, как эти списки сохраняются).Какой адаптер я должен использовать для резервного копирования списка?Должен ли я использовать ListAdapter или CursorAdapter?

Да, CursorAdapter, вероятно, подойдет в этом случае.В вашей ListActivity вы можете выполнить запрос, например

...
CursorAdapter adapter = managedQuery(....);
setListAdapter(adapter);
...

Обновление списка произойдет автоматически, если вы правильно реализовали ContentProvider.Потому что в этом случае у вас будет такая строка, как

...
getContext().getContentResolver().notifyChange(uri, null);
...

в ваших методах вставки / обновления / удаления, которая будет уведомлять зарегистрированных наблюдателей об обновлении их данных.

1 голос
/ 30 августа 2010
  1. Все будет хорошо. Да, операторы SQL в виде статических строк тоже подойдут.
  2. Путем выполнения SQL для создания базы данных в методе onCreate помощника. Android гарантирует, что это произойдет только один раз. Вы можете использовать номера версий для обновления базы данных позже.
  3. Да, просто получите ваш объект базы данных от помощника и выполните SQL, чтобы очистить базу данных в любое время. Вы можете использовать таймер, чтобы запланировать это.
  4. Рекомендации по работе с базами данных SQLite все еще применимы и здесь.
  5. Не ясно понимаю, что вы имеете в виду, но все равно попытаюсь. Вы можете использовать CursorAdapter для привязки записей вашей базы данных к ListView. Если вы просто хотите сохранить свой список, вы можете просмотреть базу данных с помощью курсора, возвращенного из SQLiteDatabase.query (...), и сохранить его в файл. Или, если у вас все еще есть проанализированные данные в виде ArrayList в памяти, вы также можете сохранить их в файл.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...