#java #android #sql #sqlite
Вопрос:
В настоящее время я программирую базу данных SQLite для приложения рецептов. Я хочу искать на основе названия рецепта (строкового имени) . Когда я ищу «Фаст-фуд», все работает нормально. Однако, если я буду искать только «Быстро», записи не будут возвращены. Я знаю, что ошибка в этой строке: «НРАВИТСЯ ?» . К сожалению, я не знаю, какой правильный термин. Я надеюсь, что вы сможете мне помочь. Спасибо
public List<Recipe> selectAllByName(String name) {
List<Recipe> recipes = new ArrayList<>();
try (Cursor cursor = db.query(Config.TABLE_NAME,
new String[]{Config.KEY_ID, Config.KEY_NAME, Config.KEY_CATEGORY, Config.KEY_IMAGE_PATH, Config.KEY_TIME, Config.KEY_SERVICE,},
Config.KEY_NAME " LIKE ? ", new String[]{name}, null, null, null)) {
if (cursor.moveToFirst()) {
do {
Recipe recipe = new Recipe(
cursor.getLong(0),
cursor.getString(1),
cursor.getString(2),
cursor.getString(3),
cursor.getString(4),
cursor.getString(5));
recipe.setIngredients(ingredientDAO.selectAllByRecipeId(recipe.getId()));
recipe.setDirections(directionDAO.selectAllByRecipeId(recipe.getId()));
recipes.add(recipe);
} while (cursor.moveToNext());
}
}
return recipes;
}
Комментарии:
1. В SQL
LIKE
—%
это подстановочный знак , соответствующий нескольким символам, и_
подстановочный знак, соответствующий отдельным символам. Итак,LIKE '%Smith%'
имеет смысл, ноLIKE 'Smith'
это то же= 'Smith'
самое, что и : SQLite Docs on, как2. Спасибо за ваш ответ и объяснение. Не могли бы вы сказать мне, что я должен изменить в своем случае, чтобы это сработало?
3. Либо передайте параметр вашей функции как
Fast%
, а неFast
как, либо добавьте%
символ в строку как часть вашей функции. (Предполагая, что вы хотите только «начать с». Если вы хотите «содержит», то строкаname
должна содержать%
символ как в начале, так и в конце.)4. Спасибо за вашу помощь.