VertX SQL 查询与参数如何使用 LIKE ?带通配符

Posted

技术标签:

【中文标题】VertX SQL 查询与参数如何使用 LIKE ?带通配符【英文标题】:VertX SQL queryWithParams Howto use LIKE ? with wildards 【发布时间】:2019-03-21 17:45:50 【问题描述】:

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

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"));
            
        
    );

我需要如何编辑我的查询字符串以便 ?将被搜索字符串替换,我将能够使用通配符?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

以上是关于VertX SQL 查询与参数如何使用 LIKE ?带通配符的主要内容,如果未能解决你的问题,请参考以下文章

Sql Server参数化查询之where in和like实现详解

在 Vertx (Vert.x 3) 中异步运行多个 Sql 查询

Sql Server参数化查询之where in和like实现详解

Sql Server参数化查询之where in和like实现详解

C#中 SQL语句 带参数的like 查询怎么写

转载Sql Server参数化查询之where in和like实现详解