Какая разница между этими двумя подходами? Для меня кажется, что единственным преимуществом 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 для других подходов для запроса базы данных.