【问题标题】:how to use special character in prepared statement java如何在准备好的语句java中使用特殊字符
【发布时间】:2013-02-21 13:31:43
【问题描述】:

我不是经常使用 like 子句,但现在我有一个要求,我想根据它的名称获取一些文件。 我试过了

"SELECT *  FROM FILES WHERE FILENAME LIKE "+"%"+"?"+"%";

接下来我尝试转义字符

 "SELECT *  FROM FILES WHERE FILENAME LIKE "+"\\%"+"?"+"\\%";

我创建准备好的语句并执行其给出错误的两种方式,

请帮助我如何使用 % ?

提前致谢

【问题讨论】:

  • 请发布错误信息。否则我们怎么知道出了什么问题?
  • 你试过"SELECT * FROM FILES WHERE FILENAME LIKE '%?%'" 吗? EDIT 注意 ' 字符
  • 这是错误信息Message 'You have an error in your SQL syntax;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '%'co'%' 附近使用正确的语法 2013-02-21 18:51:47,445 ERROR [STDERR] com.mysql.jdbc.exceptions。 jdbc4.MySQLSyntaxErrorException:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '%'co'%' 附近使用正确的语法
  • 它的语法无效,因为准备好的语句将替换 ?带有“paramValue”(包括引号)。因此 % 必须在参数值内
  • 是的,我试过了,您是否尝试过“SELECT * FROM FILES WHERE FILENAME LIKE '%?%'”,即使它给出了一个错误,即所需参数的数量为 0,所以它没有检测到?

标签: java mysql prepared-statement


【解决方案1】:

这样做:

"SELECT *  FROM FILES WHERE FILENAME LIKE ?";

然后将参数传递为 as

"%.jpg"

或者使用任何你想要的通配符。

例如

PreparedStatement st = connection.prepareStatement("SELECT *  FROM FILES WHERE FILENAME LIKE ?");
st.setString(1, "%.jpg");
ResultSet rs = st.executeQuery();

【讨论】:

    【解决方案2】:

    我同意 cowls 的回答,但我认为根据您最初的帖子,您还希望在搜索字符串后加上百分号。

    所以,类似:

    "%myfilename%"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      • 2012-12-18
      • 2018-09-05
      • 1970-01-01
      • 2012-12-18
      相关资源
      最近更新 更多