SQLite ищет строку, начинающуюся с xyz

#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. Спасибо за вашу помощь.