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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

我正在使用预处理语句来执行mysql数据库查询。我想实现基于排序关键字的搜索功能。

为此,我需要使用LIKE关键字,那我知道。而且我也使用过预先准备的语句,但我不知道如何使用它,LIKE因为从下面的代码我将添加哪里'keyword%'

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

PreparedStatement pstmt = con.prepareStatement(
      "SELECT * FROM analysis WHERE notes like ?");
pstmt.setString(1, notes);
ResultSet rs = pstmt.executeQuery();
提问于
用户回答回答于

你需要将其设置为值本身,而不是在准备的语句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 + "%");
用户回答回答于

像这样编码:

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

确保你包含下面的引号,因为它们会导致异常。

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

扫码关注云+社区