Android SQLite: какой запрос ( "запрос" или "rawQuery" ) выполняется быстрее?
Я разрабатываю одно приложение для базы данных Android. Я просто хочу знать, какой код выполняется быстрее и в чем разница между ними?
Запрос - 1=
db.rawQuery("select * from user_table where user_id =" + userId, null);
Запрос - 2=
db.query(USER_TABLE_NAME, ALL_COLUMNS, "user_id = " + userId, null, null, null, null);
Ответы
Ответ 1
Использовать запрос.
Запросы предварительной компиляции Android и использование слишком большого количества различных необработанных запросов могут вызвать проблемы с производительностью.
Использовать rawQuery только тогда, когда это абсолютно необходимо.
Кроме того, оба примера имеют серьезную проблему безопасности SQL Injection.
Вы должны дезинформировать userId.
Самое очевидное, что нужно сделать Android, используя:
db.query(USER_TABLE_NAME, ALL_COLUMNS, "user_id = ?", new String[] {userId}, null, null, null);
Ответ 2
Взгляд на SQLiteDatabase.java в источнике android показывает, что запрос (..) заканчивается вызовом QueryBuilder для построения запроса как одной строки, а затем он по существу вызывает rawQuery(). Они должны быть примерно эквивалентными, предполагая, что вы также сделали одну и ту же работу, чтобы создать собственное выражение.