разница между rawquery и execSQL в базе данных android sqlite



В чем заключается точная разница между использованием rawquery и execSQL ??
При написании запроса в Android activity, когда использовать rawquery и когда использовать execSQL ?

520   2  

2 ответов:

Из документации API:


void execSQL (String sql)

Выполните одну инструкцию SQL, которая не является SELECT или любой другой инструкцией SQL, возвращающей данные.

void execSQL (String sql, Object[] bindArgs)

Выполните одну инструкцию SQL, которая не является SELECT / INSERT / UPDATE / DELETE.

Документация противоречива, но они ведут себя одинаково. Документация последнего находится больше в глубина.

Cursor rawQuery (String sql, String[] selectionArgs)

Выполняется при условии SQL и возвращает указатель на результирующий набор.


Использует для rawQuery:

  • вы хотите запросить базу данных с помощью оператора SELECT.
    = > rawQuery("SELECT ... возвращает набор строк и столбцов в Cursor.
  • особые случаи, такие как PRAGMA table_info, который возвращает данные в строках (см. этот вопрос )
  • Примечание: не используйте rawQuery для INSERT, UPDATE или DELETE или что-нибудь еще, что изменяет базу данных. Вы столкнетесь с "зачем delete rawQuery нужен moveToFirst, чтобы на самом деле удалить строки?". Причина в том, что запросы могут отложить чтение результата до необходимости (= доступ к курсору), что означает для SQLite задержкувыполнения оператора .

Использует для execSQL:

  • у вас есть "инструкции" для базы данных. Как CREATE TABLE (или любое другое CREATE утверждение, например CREATE INDEX), DROP, PRAGMAs, которые задают свойства, а не возвращают их, ...
  • INSERT, UPDATE или DELETE, когда вас не интересует количество измененных строк или идентификатор последней строки вставлять.
  • все остальное, что зависит от выполнения оператора.

Если вы хотите выполнить что-то в базе данных, не касаясь ее выходных данных (например, создать / изменить таблицы), то используйте execSQL , но если вы ожидаете каких-то результатов в ответ на ваш запрос (например, выбрать записи), то используйте rawQuery

Comments

    Ничего не найдено.