当前位置: 首页 > 面试题库 >

Java在准备好的语句中使用“ like”通配符

方献
2023-03-14
问题内容

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

为此,我需要使用LIKE关键字,这一点我知道很多。而且我之前也使用过预处理语句,但是我不知道如何使用它,LIKE因为从以下代码中,我将在哪里添加'keyword%'

我可以直接在pstmt.setString(1, notes)as (1, notes+"%")或类似的东西中使用它吗?我在网络上看到很多帖子,但在任何地方都没有好的答案。

PreparedStatement pstmt = con.prepareStatement(
      "SELECT * FROM analysis WHERE notes like ?");
pstmt.setString(1, notes);
ResultSet rs = pstmt.executeQuery();

问题答案:

你需要在值本身中而不是在准备好的语句SQL字符串中进行设置。

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

notes = notes
    .replace("!", "!!")
    .replace("%", "!%")
    .replace("_", "!_")
    .replace("[", "![");
PreparedStatement pstmt = con.prepareStatement(
        "SELECT * FROM analysis WHERE notes LIKE ? ESCAPE '!'");
pstmt.setString(1, notes + "%");

或后缀匹配:

pstmt.setString(1, "%" + notes);

或全球比赛:

pstmt.setString(1, "%" + notes + "%");


 类似资料:
  • 问题内容: 我正在使用准备好的语句来执行mysql数据库查询。我想实现基于各种关键字的搜索功能。 为此,我需要使用关键字,我知道很多。而且我之前也使用过预处理语句,但是我不知道如何使用它,因为从以下代码中,我将在哪里添加? 我可以直接在as 或类似的东西中使用它吗?我在网络上看到很多帖子,但是在任何地方都没有好的答案。 问题答案: 您需要在值本身中而不是在准备好的语句SQL字符串中进行设置。 因此

  • 问题内容: 我正在尝试运行以下查询,但通配符出现问题。 我收到一条错误消息,指出:无法通过引用传递参数2。我需要使用通配符的原因是因为列的数据包含序列化的数组。我想,如果有一种更简单的方法来处理此问题,该怎么办? 提前致谢! 问题答案: 您必须通过引用传递参数,这意味着您必须传递 单个变量 (而不是串联字符串)。不过,没有理由您不能专门构造这样的变量来传递:

  • 我想使用带有LIKE关键字的java准备语句。我正在尝试匹配日期字符串。这是我的密码。 它给出了以下例外。 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,了解在“?”附近使用的正确语法?和s.date一样?订单截止日期DESC LIMIT 1'第1行

  • 问题内容: 我要执行以下mysql查询: 我尝试了一下但没有成功: 因此,我问您是否可以在准备好的语句中使用%通配符。 /编辑 谢谢。其与: 问题答案: 它也可以通过以下方式与绑定参数一起使用:

  • 问题内容: 这行不通 警告:mysqli_stmt :: bind_param():第1行上/home/rgero/public_html/php/searchadmins.php中已准备好的语句中的变量数量与参数数量不匹配 这个也不行 致命错误:错误的SQL:SELECT * FROM WHERE用户名类似%{?}%错误:第1行的/home/rgero/public_html/php/searc

  • 问题内容: 在mysqli准备好的语句中,NULL变成’‘(对于字符串)或0(对于整数)。我想将其存储为真正的NULL。有什么办法吗? 问题答案: 我知道这是一个旧线程,但是可以将真实的NULL值绑定到准备好的语句(请阅读this)。 实际上,您可以使用mysqli_bind_parameter将NULL值传递给数据库。只需创建一个变量并将NULL值(请参见手册页)存储到该变量并将其绑定即可。无论