首页  >  文章  >  Java  >  如何在准备好的语句中有效使用“like”通配符?

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

Linda Hamilton
Linda Hamilton原创
2024-11-17 14:29:02735浏览

How to use the

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

准备语句通过防止 SQL 注入攻击和增强性能,提供了执行 SQL 查询的有效方法。但是,将“like”通配符与准备好的语句集成可能有点棘手。

考虑以下查询,该查询根据关键字在“analysis”表中搜索行:

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

要在此查询中使用“like”通配符,您需要将其包含在绑定到准备好的语句参数的值中。仅仅在 pstmt.setString(1, Notes) 中添加“keyword%”是不够的。

相反,您可以根据需要实现前缀、后缀或全局匹配:

  • 前缀匹配:前缀匹配搜索以关键字开头的行。要通过查询实现此目的,请使用以下代码:
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 + "%");

请记住使用正斜杠 () 对“notes”字符串中的特殊字符进行转义,以防止它们干扰“like”通配符搜索。

以上是如何在准备好的语句中有效使用“like”通配符?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn