Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将java准备语句与LIKE一起使用_Java_Mysql_Prepared Statement_Sql Like - Fatal编程技术网

将java准备语句与LIKE一起使用

将java准备语句与LIKE一起使用,java,mysql,prepared-statement,sql-like,Java,Mysql,Prepared Statement,Sql Like,我想使用带有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

我想使用带有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服务器版本对应的手册,以了解使用接近“”的正确语法?那我们约会怎么样?第1行s.date DESC LIMIT 1'的订单

替换:

ps.setString(2,  "%" + date + "%");
与:


我可以这样做

ps.setString(2, date + "%");

谢谢大家:

像在日期栏中使用一样有点不寻常?s.date是什么数据类型我打赌你的下一个语句是ps.executeQuerysummaryChooser,这是错误的。它应该只是ps.executeQuery。通过将SQL文本传递给Statement.executeQueryString SQL方法,当您应该调用PreparedStatement.executeQuery方法时,JDBC驱动程序会忽略准备好的部分,并尝试直接执行SQL,就像这样。使用PreparedStatement时,这是一个常见错误。Off topic但最好使用JOIN而不是隐式连接,因为错误来自MySQL服务器,错误包括?标记,唯一的方法是如果SQL没有准备好,这就是为什么我愿意打赌我的猜测-@安德烈亚斯:你可能是对的,在这种情况下,这将是一个很好的复制品:为什么会有帮助?”与通配符不同。此外,列的值不太可能以撇号开头和结尾。为什么删除值的前导通配符会修复SQL语句的语法错误?在我的场景中,我不考虑日期之前的任何内容。
ps.setString(2, date + "%");