2010-09-29 2 views
0

Недавно я обновил свой Nexus One до Froyo (2.2), и я заметил несколько существенно отличающееся поведение с SQLite.Android 2.2 (Froyo) SQLite не хватает некоторых функций функции IN?

Например, я использовал подзапрос (возвращающие данные строки) как часть предложения IN, и часть подзапроса больше не функционирует корректно. Я приложил запрос пример SQL работы с базой данных контактов ниже (прямой запрос, показанный только для иллюстрации):

SELECT _id FROM data WHERE display_name IN (SELECT display_name FROM contacts); 

До Android 2.1 это не было проблемой. После обновления, однако, это возвращает пустой набор записей, если я не запускаю подзапрос отдельно, окружая каждое из полученных значений в одинарных кавычках и добавляя эти значения непосредственно в предложение IN.

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

Неужели кто-нибудь еще сталкивается с этой проблемой?

ответ

0

Если поведение SQLite действительно изменилось, вы можете попробовать переписывание запроса с помощью оператора EXISTS вместо:

SELECT _id FROM data WHERE EXISTS 
    (SELECT * FROM contacts WHERE contacts.display_name = data.display_name) 

Это устраняет зависимость от оператора IN.

+0

Спасибо, это выглядит полезно! К сожалению, мне придется изменить подзапрос, так как код слияния андроида изменился сгенерированным именем display_name. Это должно стать стимулом для моих других проектов, хотя :) –