Какая разница между этими двумя подходами? Для меня кажется, что единственным преимуществом SQLiteDatabase является его способность работать с различными базами данных. Я прав?
SQLiteQueryBuilder.query() и SQLiteDatabase.query()
Ответ 1
Основной метод SQLiteDatabase#rawQuery()
. Оба SQLiteDatabase#query()
и SQLiteQueryBuilder
являются просто помощниками для создания SQL.
SQLiteDatabase#query()
может составлять только простые запросы из одной таблицы. SQLiteQueryBuilder
может создавать объединения, объединения и т.д. Поскольку SQLiteQueryBuilder
является дополнительным объектом, вы бы его только построили, если вам нужна его мощность.
Лично я считаю, что любой нетривиальный SQL легче читать как SQL, чем как части, составленные с помощью такого помощника, поэтому я бы использовал rawQuery
over SQLiteQueryBuilder
, но это вопрос вкуса и того, насколько хорошо вы знать SQL. SQLiteQueryBuilder
также может быть полезен, если у вас есть общие подзапросы, которые вы хотите скомпоновать по-разному.
На самом деле я бы предпочел (я использую sqlite, в основном, используя его API C), чтобы использовать подготовленные операторы, потому что компиляция SQL медленна по сравнению с исполнением, но я не вижу эту опцию в интерфейсе Java.
Ответ 2
SQLiteQueryBuilder полезен, если вы хотите делать соединения на нескольких таблицах. Для этого есть несколько удобных методов, если вы посмотрите исходный код на GrepCode: SQLiteQueryBuilder
В противном случае я не могу думать о твердой причине использовать SQLiteQueryBuilder для других подходов для запроса базы данных.