Я пытался использовать символьный подстановочный знак "_"
в sqlite, где условия и близки к «прыжкам с высоты». Я пробовал и rawQuery, и запрос с различными жестко и мягко закодированными параметрами. Кажется, он игнорирует символ подстановки "_"
и возвращает все строки или их вообще нет.
Данные хранятся в нескольких столбцах, представляющих признаки объекта, например, столбец может представлять цвета объекта
("red,orange,yellow,green,blue,indego,violet,black")
и цвет строки может быть "01001000", что означает, что это оранжевый и синий, но не красный, желтый и т. Д. Другие столбцы содержат одиночные символы, т. Е. Размер содержит s, m или l (отображение малых, средних, больших), которые содержит база данных несколько столбцов каждого типа, идея создать максимально компактную базу данных.
Мое первое намерение состояло в том, чтобы кодировать, передав «где» моего выбора в виде строки в rawQuery(myselect,null)
, где myselect был скомпилирован в коде в ответ на несколько функций, выбранных пользователем.
то есть
строка mywhere компилируется для возврата: -
colour1 как "_1__10__"
и colour2 как "___1_01__"
и размер = "l"
и передал в rawQuery
db.rawQuery("SELECT _id , name FROM widgets WHERE " + mywhere , null);
Приведенный ниже оператор отлично работает с помощью Firefox SQLite Manager
SELECT _id , name FROM widgets WHERE colour1 like "_1__10_" and colour2 like "__1_01___" and size ="m"
Чтобы исследовать, я сократил запрос до одного столбца в предложении where
myselect ="SELECT _id ,name,FROM widgets where colour1 like \"1_______\"";
cursor = db.rawQuery(myselect,null);
не возвращает строк
myselect ="SELECT _id ,name,FROM widgets where colour1 like \"%1_______%\"";
cursor = db.rawQuery(myselect,null);
возвращает строки, но не у всех есть 1 на первом символе (я ожидал этого)
myselect ="SELECT _id ,name, FROM widgets where colour1 like ?";
String[] whereArguments = { "1_______" };
cursor = db.rawQuery(myselect,whereArguments);
не возвращает строк
myselect ="SELECT _id ,name, FROM widgets where colour1 like ?";
String[] whereArguments = { "%1_______%" };
cursor = db.rawQuery(myselect,whereArguments);
возвращает строки, но не все имеют 1 на первом символе
Но я не получаю никаких строк из
myselect ="SELECT _id ,name, FROM widgets where colour1 like ?";
String[] whereArguments = { "10000000" };
cursor = db.rawQuery(myselect,whereArguments);
и есть строки, содержащие "10000000"
Есть ли у кого-нибудь решения? Я пробовал поиск, но кажется, что rawQuery и запрос имеют сомнительную функциональность в Android.