【问题标题】:How to use MySQL like operator in JDBC?如何在 JDBC 中使用类似 MySQL 的运算符?
【发布时间】:2011-07-06 16:36:54
【问题描述】:

我的代码中有以下语法,但是当我尝试在 JDBC 中使用 LIKE 运算符时它不起作用。当它相等时,它以这种方式工作正常:

ResultSet resultSet = statement.executeQuery("SELECT * 
                                                FROM drawings 
                                               WHERE name = '"+ DT +"'");

但如果我想使用LIKE 运算符作为通配符进行搜索,我会不断收到错误消息,指出“%”不是有效字符。如何正确使用 LIKE 运算符?

【问题讨论】:

  • 请不要告诉我您正在从您的 JSP 页面执行查询。
  • 你的 LIKE 查询是什么样的?
  • query=("SELECT * FROM graphics WHERE name LIKE '"%DT%"'");
  • 我知道这是错误的,但我试图搜索示例,但我找不到任何东西......我知道我不应该执行查询 JSP 页面,但这是编程的方式在我工作的公司完成...如果您认为这是一种不好的做法,我深表歉意,但我现阶段,我需要一些帮助...谢谢
  • 我发布了一个答案。但是,这又不是 JSP 问题。在 JSP 文件而不是 Java 类中编写 Java/JDBC 代码并且 Java/JDBC 代码出现问题不会使其成为 JSP 问题。所以我从你的问题中删除了 JSP 引用/标签。一旦您遇到 JSP 生命周期、标签和/或 EL 等问题,我们就可以说是 JSP 问题。

标签: java mysql jdbc


【解决方案1】:

来自cmets:

query=("SELECT * FROM drawings WHERE name LIKE '"%DT%"'");

这不会编译。假设DT 是一个变量,那么它应该看起来像

query = "SELECT * FROM drawings WHERE name LIKE '%" + DT + "%'";

(注意语法高亮,% 必须是 SQL 字符串的一部分!)

但是,像在 SQL 查询中那样连接用户控制的字符串变量会为成功的SQL injectionattacks 敞开大门Learn 怎么用 PreparedStatement 来代替。

String sql = "SELECT * FROM drawings WHERE name LIKE ?";
// ...
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, "%" + DT + "%");
resultSet = preparedStatement.executeQuery();
// ...

【讨论】:

  • 非常感谢 Balus...现在我理解了您对 JSP 的评论...我肯定会考虑到这一点并避免在我的问题上使用错误的标签...再次感谢您的回答解决了我 2 天的问题,我也在实施preparedStatement。问候
猜你喜欢
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
相关资源
最近更新 更多