首页 >数据库 >mysql教程 >为什么 `statement.executeQuery(searchPerson);` 会导致 Java 准备语句中出现 SQL 语法错误?

为什么 `statement.executeQuery(searchPerson);` 会导致 Java 准备语句中出现 SQL 语法错误?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-11 15:22:41575浏览

Why Does `statement.executeQuery(searchPerson);` Cause a SQL Syntax Error in Java Prepared Statements?

Java 准备语句:使用“?”排除 SQL 语法错误占位符

使用 Java 的预准备语句通常会导致“SQL 语法错误”消息,这通常是由于不正确的占位符 (?) 使用造成的。 让我们看一个常见的场景:

以下 Java 代码片段演示了错误的方法:

<code class="language-java">String searchPerson = "select * from persons where surname like ? and name like ?";
statement.executeQuery(searchPerson); </code>

searchPerson 字符串使用 surnamename 占位符正确定义 SQL 查询。 然而,将 searchPerson 直接传递给 statement.executeQuery() 是错误的根源。 executeQuery() 需要一个准备好的语句 已经 设置了它的参数;它不接受 SQL 字符串作为参数。

正确的实现:

解决方案在于执行查询之前正确绑定参数。 参数绑定后,应在不带任何参数的情况下调用 executeQuery() 方法。 更正后的代码如下所示(假设 surnameValuenameValue 保存实际值):

<code class="language-java">String searchPerson = "select * from persons where surname like ? and name like ?";
PreparedStatement statement = connection.prepareStatement(searchPerson);
statement.setString(1, surnameValue);
statement.setString(2, nameValue);
ResultSet rs = statement.executeQuery(); // Execute without additional parameters
// Process the ResultSet (rs) here</code>

修改后的代码首先创建一个 PreparedStatement 对象,然后使用 setString() 设置参数值,最后使用 executeQuery() 执行查询,而无需 再次传递 SQL 字符串。这可确保数据库正确解释占位符并避免语法错误。

以上是为什么 `statement.executeQuery(searchPerson);` 会导致 Java 准备语句中出现 SQL 语法错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn