2013-05-03 3 views
0

Мне было интересно, можем ли мы использовать базы данных, такие как (contacts.db, mmssms.db) напрямую, а не контент-провайдеры?Поставщики контента или прямая база данных?

У меня есть причина спросить об этом. В моем недавнем проекте я предполагал разработать контактное приложение. Я использовал контент-провайдера для управления контактами. Как я узнал через контент-провайдеров, я могу запросить только таблицу за раз с помощью URI, нет способа (по крайней мере, я не нашел) присоединиться к двум таблицам, а затем получить запрос.

И я читал, что базы данных видны только для приложений, которые изначально создавали их, так что мое приложение сможет получить доступ к этим базам данных?

Я просто разработчик хобби для своего собственного телефона. У меня нет намерения сделать приложение, которое напрямую использует базы данных. Я могу вытащить базу данных с устройства, проанализировать их через sqlite. Дело не в том, что я против поставщиков контента, или они мне не нужны, пишите сейчас, просто это можно сделать или нет?

Любые мнения?

ответ

1

Провайдеры контента предоставляют вам гораздо больше, чем просто доступ к базе данных. Возможность использовать Loaders для автоматической перезагрузки ваших данных (и обновления вашего пользовательского интерфейса), когда базовые изменения данных могут значительно упростить ваши приложения.

Целью поставщиков контента является создание единого контролируемого уровня для доступа к вашим данным. Ничто не мешает вам создавать пользовательский URI, который объединяет несколько таблиц и возвращает итоговый результат.

+0

Убежденные до сих пор. Было бы чертовски управлять сложной контактной базой данных, не имея более сложного поставщика контактного контента. – Paras

+0

Как создать пользовательский URI для объединения нескольких таблиц и возврата данных? – Paras

+0

@GauravTiwari - если вы пишете собственный поставщик контента, вы можете предоставить любые URI, которые вы хотите запросить. Моя рекомендация состоит в том, чтобы сделать отдельный URI конкретным для любого соединения, которое вам нужно (например, у вас есть URI/task URI и URI группы) - создать URI/group_группы, который объединяет информацию из обоих). Если вы используете SQLiteQueryBuilder, то вы можете использовать setTables для своего соединения (http://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder.html#setTables(java.lang.String) имеет пример) – ianhanniballake