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
字符串使用 surname
和 name
占位符正确定义 SQL 查询。 然而,将 searchPerson
直接传递给 statement.executeQuery()
是错误的根源。 executeQuery()
需要一个准备好的语句 已经 设置了它的参数;它不接受 SQL 字符串作为参数。
正确的实现:
解决方案在于在执行查询之前正确绑定参数。 参数绑定后,应在不带任何参数的情况下调用 executeQuery()
方法。 更正后的代码如下所示(假设 surnameValue
和 nameValue
保存实际值):
<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中文网其他相关文章!