首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在预准备语句中使用"like“通配符

在预准备语句中使用"like“通配符
EN

Stack Overflow用户
提问于 2011-11-24 03:28:20
回答 5查看 193.1K关注 0票数 195

我正在使用准备好的语句来执行mysql数据库查询。我想实现一个基于关键字的搜索功能。

为此,我需要使用LIKE关键字,这是我知道的。我以前也使用过预准备语句,但我不知道如何将它与LIKE一起使用,因为在下面的代码中,我将把'keyword%'添加到哪里?

我可以在pstmt.setString(1, notes)中直接使用它作为(1, notes+"%")或类似的东西吗?我在网上看到了很多关于这个问题的帖子,但到处都没有好的答案。

代码语言:javascript
复制
PreparedStatement pstmt = con.prepareStatement(
      "SELECT * FROM analysis WHERE notes like ?");
pstmt.setString(1, notes);
ResultSet rs = pstmt.executeQuery();
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-11-24 03:35:42

您需要在值本身中设置它,而不是在预准备语句SQL字符串中。

因此,这应该适用于前缀匹配:

代码语言:javascript
复制
notes = notes
    .replace("!", "!!")
    .replace("%", "!%")
    .replace("_", "!_")
    .replace("[", "![");
PreparedStatement pstmt = con.prepareStatement(
        "SELECT * FROM analysis WHERE notes LIKE ? ESCAPE '!'");
pstmt.setString(1, notes + "%");

或后缀匹配:

代码语言:javascript
复制
pstmt.setString(1, "%" + notes);

或全局匹配:

代码语言:javascript
复制
pstmt.setString(1, "%" + notes + "%");
票数 310
EN

Stack Overflow用户

发布于 2019-11-21 20:58:14

我们可以使用SQL函数。

代码语言:javascript
复制
PreparedStatement pstmt = con.prepareStatement(
      "SELECT * FROM analysis WHERE notes like CONCAT( '%',?,'%')";
pstmt.setString(1, notes);
ResultSet rs = pstmt.executeQuery();

这对我的情况非常有效。

票数 18
EN

Stack Overflow用户

发布于 2016-03-11 02:01:22

代码语言:javascript
复制
PreparedStatement ps = cn.prepareStatement("Select * from Users where User_FirstName LIKE ?");
ps.setString(1, name + '%');

试试这个。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8247970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档