【发布时间】:2019-07-26 01:01:01
【问题描述】:
我想使用带有 LIKE 关键字的 java 准备语句。 我正在尝试匹配日期字符串。 这是我的代码。
String summaryChooser = "SELECT * FROM PRODUCT p, CODE_COVERAGE_SUMMARY s WHERE "
+ " p.product_id = s.product_id AND p.product_id = ? AND s.date LIKE ? "
+ " ORDER BY s.date DESC LIMIT 1 ";
ps = dbConnection.prepareStatement(summaryChooser);
ps.setInt(1, productsResult.getInt("product_id"));
ps.setString(2, "%" + date + "%");
它给出了以下异常。
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 您的 SQL 语法有错误; 检查与您的 MySQL 服务器版本相对应的手册,以获取在 '? 附近使用的正确语法。 AND s.date LIKE ? ORDER BY s.date DESC LIMIT 1' 在第 1 行
【问题讨论】:
-
对 DATE 列使用 LIKE 有点不寻常?
s.date是什么数据类型 -
我敢打赌,您的下一个陈述是
ps.executeQuery(summaryChooser),这是错误的。它应该只是ps.executeQuery()。通过将 SQL 文本传递给Statement.executeQuery(String sql)方法,当您应该调用PreparedStatement.executeQuery()方法时,JDBC 驱动程序会忽略“准备好的”部分并尝试按原样直接执行 SQL。这是使用PreparedStatement时的常见错误。 -
离题但最好使用JOIN而不是使用
,的隐式连接 -
@MarkRotteveel 会很好,但不是真的需要,因为错误来自 MySQL 服务器,并且错误包括
?标记,并且发生的唯一方法是 SQL 不是没有“准备好”,这就是为什么我愿意赌上我的“猜测”。 ;-) -
@Andreas 你可能是对的,在这种情况下,这将是一个很好的副本:MySQLSyntaxErrorException near “?” when trying to execute PreparedStatement
标签: java mysql prepared-statement sql-like