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

时间:2016-06-13 19:10:01

标签: java mysql jdbc sql-like apostrophe

我有像这样的MYSQL查询

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

这个查询是自动完成的,如果我在输入撇号(')零点异常时搜索像代码,女孩等的单词

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

我从mysql数据库中获取结果。

我怎样才能做到这一点。

3 个答案:

答案 0 :(得分:0)

通常当您使用硬编码的名称时,您可以重复并逃避

<div ng-controller="ListController as listCtrl">
    <md-card>
        <md-card-content>
            <h2>Bookmarks</h2>
            <md-list>
                <md-list-item ng-repeat="bookmark in listCtrl.bookmarks">
                    <md-item-content>
                        <div class="md-tile-content">
                            <p>{[{ bookmark.name }]} - {[{ bookmark.url }]}</p> // used interpolateProvider to allow "{[{" instead of "{{"
                        </div>
                        <md-divider ng-if="!$last"></md-divider>
                    </md-item-content>
                </md-list-item>
            </md-list>
        </md-card-content>
     </md-card>
  </div>

如果您正在接受清理字符串或使用参数化查询。查看准备好的语句。

答案 1 :(得分:0)

您应该使用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 :(得分:-1)

这是我在原始评论中提出的建议,是你尝试过的吗?

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