当前位置:首页 > 后端开发 > 正文

Java中SQL LIKE语句如何实现?

在Java中使用SQL的 LIKE时,需结合通配符 %或 _,通过 PreparedStatement设置参数, ,“ java,String sql = "SELECT * FROM table WHERE column LIKE ?";,PreparedStatement ps = connection.prepareStatement(sql);,ps.setString(1, "%keyword%"); // 包含keyword的任意位置,ResultSet rs = ps.executeQuery();,` ,注意用% 匹配任意字符序列,_`匹配单个字符,参数值需手动添加通配符。

在Java中执行SQL的LIKE查询时,需结合JDBC的PreparedStatement实现安全高效的模糊匹配,以下是详细实现方案:

Java中SQL LIKE语句如何实现? 第1张

SQL LIKE的作用

LIKE用于在WHERE子句中进行模糊匹配,支持两种通配符:

  • :匹配任意长度字符(包括0个字符)
  • _:匹配单个字符

    name LIKE '张%' 匹配所有以“张”开头的姓名。


Java中安全实现LIKE查询(防SQL载入)

必须使用PreparedStatement而非Statement,避免SQL载入风险

通配符使用示例

匹配场景 SQL示例 Java参数设置
以”技术”开头 LIKE '技术%' pstmt.setString(1, "技术%")
以”有限公司”结尾 LIKE '%有限公司' pstmt.setString(1, "%有限公司")
包含”咖啡” LIKE '%咖啡%' pstmt.setString(1, "%咖啡%")
第二个字符是”A” LIKE '_A%' pstmt.setString(1, "_A%")


转义特殊字符

若需匹配包含或_的文本(如25%),使用ESCAPE子句:

Java中SQL LIKE语句如何实现? 第2张

String search = "25%"; // 用户输入含%的文本 String sql = "SELECT * FROM products WHERE discount LIKE ? ESCAPE '!'"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { // 转义%为!%,转义_为!_ String escapedValue = search.replace("!", "!!") .replace("%", "!%") .replace("_", "!_"); pstmt.setString(1, "%" + escapedValue + "%"); // 执行查询... }


性能优化与注意事项

  1. 索引问题
    • 前缀匹配(如LIKE '张%')可能使用索引
    • 后缀匹配(LIKE '%北京')或全通配(LIKE '%咖啡%')会导致全表扫描,大数据表需谨慎
  2. 输入验证:清理用户输入中的非法字符(如分号、引号)
  3. 连接池管理:使用Druid、HikariCP等连接池提升性能
  4. 替代方案:全文搜索需求考虑Elasticsearch或数据库内置全文索引(如MySQL的FULLTEXT)

最佳实践总结

  1. 始终用PreparedStatement传参(禁止字符串拼接SQL)
  2. 通配符/_通过Java字符串拼接,而非硬编码在SQL中
  3. 敏感字符(如)需显式转义
  4. 高频模糊查询场景建议引入专用搜索技术


引用说明

本文代码示例遵循Oracle官方JDBC指南[1],安全规范参考OWASP SQL载入防护建议[2],性能优化部分依据MySQL 8.0索引文档[3]。


[1] Oracle JDBC Tutorial

[2] OWASP SQL Injection Prevention

[3] MySQL Index Optimization

Java中SQL LIKE语句如何实现? 第3张

0