VertX SQL queryWithParams Как использовать LIKE?с подстановочными знаками - PullRequest
0 голосов
/ 21 марта 2019

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

String sql = "SELECT ID FROM MYTABLE WHERE NAME LIKE ?";

Так что это работает, когда Имя совпадает с?
Когда я пытаюсь использовать подстановочные знаки:

String sql = "SELECT ID FROM MYTABLE WHERE NAME LIKE %?%";

или

String sql = "SELECT ID FROM MYTABLE WHERE NAME LIKE '%?%'";

это не работает.
Мой код:

private void getIDsBySearchString(String search, SQLConnection conn, Handler<AsyncResult<Vector<Integer>>> resultHandler) {
    String sql = "SELECT ID FROM MYTABLE WHERE NAME LIKE ?";

    conn.queryWithParams(sql, new JsonArray().add(search), asyncResult -> {
        if(asyncResult.failed()) {
            resultHandler.handle(Future.failedFuture("No Names Found"));
        } else {
            int numRows = asyncResult.result().getNumRows();
            if(numRows >= 1) {
                Vector<Integer> IDVector = new Vector<>();
                for(int i = 0; i < numRows; i++) {
                    int id = asyncResult.result().getRows().get(i).getInteger("ID");
                    IDVector.add(id);
                }
                resultHandler.handle(Future.succeededFuture(IDVector));
            } else {
                resultHandler.handle(Future.failedFuture("No Names found"));
            }
        }
    });
}

Как мне нужно отредактировать строку запроса так? будет заменен строкой поиска, и я смогу использовать подстановочные знаки?

Ответы [ 2 ]

1 голос
/ 23 марта 2019

Часть, которая должна быть изменена, является вашим параметром search, а не частью sql:

String sql = "SELECT ID FROM MYTABLE WHERE NAME LIKE ?";

conn.queryWithParams(sql, new JsonArray().add("%"+search+"%"), asyncResult -> { ... }
1 голос
/ 22 марта 2019

Параметр не может быть внутри строки в кавычках.Он может быть частью выражения concat, включающего другие строки.

String sql = "SELECT ID FROM MYTABLE WHERE NAME LIKE '%' || ? || '%'";
...