Существует три причины, почему Вы не должны использовать for..in
для итерации по элементам массива:
for..in
циклично выполнится по всем собственным и унаследованным свойствам объекта массива, которые не являются DontEnum
; это означает, добавляет ли кто-то свойства к определенному объекту массива (существуют допустимые причины этого - я сделал так меня), или изменились Array.prototype
(который считают плохой практикой в коде, который, как предполагается, работает хорошо с другими сценариями), эти свойства будут выполнены с помощью итераций также; унаследованные свойства могут быть исключены путем проверки hasOwnProperty()
, но это не поможет, Вы с набором свойств в самом объекте массива
for..in
, как гарантируют, не сохраните элемент, заказывая
, это медленно, потому что Вы должны обойти все свойства объекта массива и его целой опытной цепочки и все еще только получите имя свойства, т.е. получить значение, дополнительный поиск будет требоваться
Вам следует использовать параметр selectionArgs
метода rawQuery
:
p_query = "select * from mytable where name_field = ?";
mDb.rawQuery(p_query, new String[] { uvalue });
Это не только решает вашу проблему с кавычками, но и смягчает SQL-инъекцию
.
DatabaseUtils.sqlEscapeString у меня работал правильно. Строка заключена в одинарные кавычки, а одинарные кавычки внутри строки становятся двойными кавычками. Пытался использовать selectionArgs в getContentResolver (). Query (), но это вообще не сработало.