2010-08-30 2 views
2

Проблема:SQLite базы данных и доступ к данным логика

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

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

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

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

Спасибо.

ответ

1

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

Вместо того, чтобы переписать его здесь я связать вас с поста я сделал здесь, на SO вопрос: Android Database Access Design Approach

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

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

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

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

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

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

+0

(+10) Спасибо за ваш ответ! Я читаю контент-провайдеров. И я планирую использовать CursorAdapter для резервного копирования списка. Таким образом, внесение изменений в Список автоматически обновит таблицу правильно? Есть ли учебник, который может помочь мне в CursorAdapters? – Samuh

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

Спасибо за ваш ответ. Что я имел в виду в (5), было то, что у меня есть ArrayList данных, а также те же данные в моей базе данных. Итак, если у меня есть ListView, я должен создать резервную копию через CursorAdapter или ArrayListAdapter? Я думаю, что CursorAdapter будет правильным выбором, потому что будет легче обрабатывать изменения в ListView при обновлении базы данных? – Samuh

+0

О, я понимаю, что вы сейчас имеете в виду. Любой из них, как правило, предпочитает CursorAdapter (SimpleCursorAdapter упрощает процесс), но обратите внимание, что если вы его используете, ваш курсор должен содержать столбец с именем «_id», иначе он не будет работать. – codinguser

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