有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在mysql中使用LIKE查询获取带撇号的记录

我有这样的MYSQL查询

String query="select DISTINCT sctName from snomedicd10map where sctName Like '" + search + "%" + "' LIMIT 5 ";

此查询用于自动完成,如果我在键入撇号(')时搜索“代码”、“女孩”等词,则会出现空点异常

我怎样才能克服这一点。当用户在文本字段中输入带有撇号(')的名称时,它应该获取结果

我已经从mysql数据库中获取了结果

我怎样才能做到这一点


共 (3) 个答案

  1. # 1 楼答案

    您应该使用PreparedStatement,这样它将为您处理转义。例如:

    try (PreparedStatement pstmt = Connection.prepareStatement("select DISTINCT sctName from snomedicd10map where sctName Like concat(?, '%') LIMIT 5") {
        pstmt.setString(1, search);
        try (ResultSet rs = pstmt.executeQuery()) {
            // process result
        }
    }
    

    或者(在代码中处理通配符):

    try (PreparedStatement pstmt = Connection.prepareStatement("select DISTINCT sctName from snomedicd10map where sctName Like ? LIMIT 5") {
        pstmt.setString(1, search + "%");
        try (ResultSet rs = pstmt.executeQuery()) {
            // process result
        }
    }
    

    JDBC驱动程序将自动处理转义(或以不需要转义的方式发送参数)

  2. # 2 楼答案

    通常,当你的名字被硬编码时,你可以重复并逃脱

    Select * from Students where name like 'John O''Neal' 
    

    如果使用清理字符串或使用参数化查询查看准备好的陈述

  3. # 3 楼答案

    这就是我在最初的评论中建议的,是你尝试过的吗

    String query="select DISTINCT sctName from snomedicd10map where sctName Like '" 
                + search.replaceAll("'", "\'") + "%' LIMIT 5 ";