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语句如何实现?

SQL LIKE的作用

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

  • :匹配任意长度字符(包括0个字符)
  • _:匹配单个字符
    name LIKE '张%' 匹配所有以“张”开头的姓名。

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

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

String keyword = "北京"; // 用户输入的搜索词
String sql = "SELECT * FROM users WHERE address LIKE ?";
try (Connection conn = DriverManager.getConnection(url, user, password);
     PreparedStatement pstmt = conn.prepareStatement(sql)) {
    // 设置参数:通配符%添加到值中(非SQL语句中)
    pstmt.setString(1, "%" + keyword + "%"); // 匹配包含"北京"的地址
    try (ResultSet rs = pstmt.executeQuery()) {
        while (rs.next()) {
            System.out.println(rs.getString("address"));
        }
    }
} catch (SQLException e) {
    e.printStackTrace();
}

通配符使用示例

匹配场景 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语句如何实现?

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语句如何实现?

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/31120.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年6月19日 16:49
下一篇 2025年6月19日 17:00

相关推荐

  • Java二进制计算原理详解

    Java中二进制基于0和1表示数值,支持字面值(如0b101)、位运算(&,|,~,

    2025年6月9日
    200
  • Java如何关闭网页?

    Java本身不直接关闭网页,但可通过以下方式间接实现:,1. 后端发送JavaScript代码(如window.close())到前端执行,2. 使用WebSocket或Server-Sent Events通知浏览器关闭,3. 在JSP/Servlet中输出window.close(),4. 通过AJAX响应触发前端关闭逻辑,需注意浏览器安全限制可能阻止脚本关闭非脚本打开的窗口。

    2025年6月12日
    100
  • Java为何总自动安装?真烦人!

    Java频繁自动安装通常由以下原因导致:某些程序(如游戏或工具软件)在安装时会静默捆绑安装其依赖的Java运行环境(JRE);系统或应用触发了Java的旧版本自动更新机制;也可能是之前卸载不彻底或残留配置触发了修复安装。

    2025年6月10日
    100
  • Java如何轻松添加下拉栏?

    在Java Swing中,通过创建JComboBox对象实现下拉栏,添加选项可使用addItem()方法或数组构造,再将其加入容器(如JPanel),最后需设置窗口可见性完成显示。

    2025年6月2日
    400
  • 如何安装黑莓Java程序?

    黑莓手机安装Java程序(JAD/JAR文件)步骤:将文件传输到手机(数据线/蓝牙/邮件),在文件管理器中找到该文件,点击运行并按提示完成安装(仅适用于支持Java的传统黑莓OS设备)。

    2025年6月12日
    000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN