rawQuery подстановочный знак `" _ "` не работает - PullRequest
1 голос
/ 21 декабря 2011

Я пытался использовать символьный подстановочный знак "_" в 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.

1 Ответ

1 голос
/ 22 декабря 2011

Не уверен, что это ваш основной источник проблем, но разделителем строк в SQLite является символ одинарной кавычки ('), а не символ двойной кавычки ("). См., Например, this .

...