Лучше ли использовать Update или execSQL для обновления данных на SQLite? - PullRequest
0 голосов
/ 10 мая 2018

Я видел в учебнике код, обновляющий данные из базы данных SQlite с использованием execSQL:

    String update = "UPDATE FRUIT SET COLOR=? WHERE ID=?";
    myDatabase.execSQL( update, new Object[] {"RED", 7});
    Cursor cursor = myDatabase.rawQuery("SELECT * FROM FRUIT;", null);
    if (cursor.moveToFirst()) {
        do {
            String name = cursor.getString(cursor.getColumnIndex("NAME"));
            String color = cursor.getString(cursor.getColumnIndex("COLOR"));

            Log.i(TAG, "onCreate: Name: " + name + ", color: " + color);
        } while (cursor.moveToNext());
    }

но я прочитал это в официальной документации Android:

enter image description here

Код, использующий execSQL , работал, но лучше использовать update , или я все еще могу использовать execSQL , так как он работал? Что лучше для хорошей практики? Так как это руководство из надежного источника, почему они используют execSQL ?

1 Ответ

0 голосов
/ 12 мая 2018

Проблема / предупреждение относительно использования execSQL может быть по нескольким причинам, одна из которых заключается в том, что вы ничего не получаете при использовании execSQL, в то время как вспомогательные методы возвращают потенциально полезные значения.

insert вернет long, содержащий идентификатор вставленной строки, иначе -1.update и delete возвращают количество затронутых строк.

Использование вспомогательных методов также снижает вероятность ошибок при печати, создавая базовый SQL-код, добавляя ключевые слова и включающие строки, а для некоторых важно предлагаяуровень защиты от SQL-инъекций (execSQL bindArgs также предлагает защиту от SQL-инъекций, также как и rawQuery).

Однако существуют ограничения, а иногда и использование execSQL/ rawQuery становится необходимым для некоторых более сложных ситуаций.

...