小编典典

在准备好的语句中使用“like”通配符

all

我正在使用准备好的语句来执行 mysql 数据库查询。我想实现基于某种关键字的搜索功能。

为此,我需要使用LIKE关键字,我知道的就这么多。而且我之前也使用过准备好的语句,但我不知道如何使用它,LIKE因为从下面的代码中我会在哪里添加'keyword%'

我可以直接在pstmt.setString(1, notes)as(1, notes+"%")或类似的东西中使用它。我在网上看到很多关于此的帖子,但在任何地方都没有好的答案。

PreparedStatement pstmt = con.prepareStatement(
      "SELECT * FROM analysis WHERE notes like ?");
pstmt.setString(1, notes);
ResultSet rs = pstmt.executeQuery();

阅读 119

收藏
2022-07-02

共1个答案

小编典典

您需要在值本身中设置它,而不是在准备好的语句 SQL 字符串中。

因此,这应该用于前缀匹配:

notes = notes
    .replace("!", "!!")
    .replace("%", "!%")
    .replace("_", "!_")
    .replace("[", "![");
PreparedStatement pstmt = con.prepareStatement(
        "SELECT * FROM analysis WHERE notes LIKE ? ESCAPE '!'");
pstmt.setString(1, notes + "%");

或后缀匹配:

pstmt.setString(1, "%" + notes);

或全局匹配:

pstmt.setString(1, "%" + notes + "%");
2022-07-02