Неверный идентификатор при использовании LIKE-запроса в Java - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь выполнить запрос LIKE в Java, используя подготовленные операторы, но получаю следующую ошибку

 ORA-00904: "%12P1A%": invalid identifier

    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet resultSet = null;

    try {
        connection = DataSourceFactory.getConnection();

        statement = connection.prepareStatement("select * from users where userID like ?");
        statement.setString(1, "%12P1A%");

        resultSet = statement.executeQuery();

        //....

    }catch (SQLException e) {
        throw new DAOException(e.getMessage());
    } finally {
        DaoUtil.closeAll(connection, statement, resultSet);
    }

Могу ли я узнать, почему это неверно?

Для получения дополнительной информации, я на самом деле получаю '% 12P1A%' с помощью какой-то другой функции, поэтому код выглядит примерно так:

statement = connection.prepareStatement("select * from users where userID like ?");
statement.setString(1, getValue());

, запрос разбирается на что-то вроде

* 1010. *

но он выбрасывает параметр MISSING IN или OUT. ИДК, почему это не выбор стоимости. Какие-либо предложения?

1 Ответ

0 голосов
/ 06 февраля 2020

Вы можете извлечь значение между '% и %', которое вы получаете из входных данных, а затем создать свой запрос как -

statement = connection.prepareStatement("select * from users where userID like '%" + <value-from-some-other-method> + "%'");

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

...