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

2022-08-31 06:14:13

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

为此,我需要使用关键字,我知道的很多。而且我以前也使用过预准备语句,但我不知道如何使用它,因为从下面的代码中,我将在哪里添加?LIKELIKE'keyword%'

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

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

答案 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 + "%");

答案 2

像这样编写代码:

PreparedStatement pstmt = con.prepareStatement(
    "SELECT * FROM analysis WHERE notes like ?");
pstmt.setString(1, notes + "%");`

确保不要像下面那样包含引号 ' ',因为它们会导致异常。

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

推荐