VertX SQL queryWithParams如何使用LIKE?与野人

时间:2019-03-21 17:45:51

标签: java sql hsqldb vert.x

我正在开发一个简单的VertX应用程序。我有一个hsqlDB,我正在尝试执行查询,该查询要从名称包含搜索参数的表中获取所有ID

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

因此,当Name与?相同时,此方法有效?
当我尝试使用通配符时:

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 个答案:

答案 0 :(得分:1)

参数不能在带引号的字符串内。它可以是包含其他字符串的concat表达式的一部分。

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

答案 1 :(得分:1)

应更改的部分是您的search参数,而不是sql部分:

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

conn.queryWithParams(sql, new JsonArray().add("%"+search+"%"), asyncResult -> { ... }