PreparedStatement 没有?在 where 子句中

Posted

技术标签:

【中文标题】PreparedStatement 没有?在 where 子句中【英文标题】:PreparedStatement with no ? in the where clause 【发布时间】:2016-06-04 17:28:52 【问题描述】:

我知道,对于PreparedStatement,我需要像这样将 SQL 表达式输入PreparedStatement

 String updateStatement =
        "update " + dbName + ".COFFEES " +
        "set TOTAL = TOTAL + ? " +
        "where COF_NAME = ?";

但是,我可以使用不带“”的完整 where 子句来提供更新语句吗?

例如

 String updateStatement =
        "update " + dbName + ".COFFEES " +
        "set TOTAL = TOTAL + ? " +
        "where COF_NAME = 'aaa";

这只是因为我将where 作为函数中的参数,我认为解析字符串以将其分解并不有效。

【问题讨论】:

动态参数只需要问号即可。您可以硬编码 where 子句。 所以我可以硬编码完整的 where 子句,没有问题吗? 如果不需要参数,则不需要使用。在问这个问题之前你有没有尝试过? @MarkRotteveel 如果我没有遇到麻烦,我不会问问题。我是preparedstatement的新手。我在插入中成功使用它。但是随着更新,我正在使用它并且我遇到了异常。所以我想知道我的问题的根源是否是非“?”在哪里或其他地方。通过 Cricket 评论,我能够确认它是另一回事。 Sqls 异常不是很容易弄清楚它们有什么问题。我本可以发布异常并要求人们为我解决它,但我更愿意自己找出答案。无论如何感谢您的评论 请注意,如果您从潜在的不安全来源(用户输入/配置)获取WHERE 子句的一部分作为参数,将其嵌入到准备好的语句中将使其容易受到 SQL 的攻击注射。 【参考方案1】:

使用准备好的语句的目的是拥有动态变量,但是当您询问是否可以对整个 where 子句进行硬编码时,是的,您可以对其进行硬编码。

【讨论】:

甜蜜而直接的答案。谢谢 没问题 :D 但尝试使用动态变量,因为它更安全。正如@Mick Mnemonic 所提到的

以上是关于PreparedStatement 没有?在 where 子句中的主要内容,如果未能解决你的问题,请参考以下文章

MySQL JDBC closeOnCompletion 对 PreparedStatement 没有影响

preparedstatement

PreparedStatement 使用like 模糊查询

PreparedStatement 未填充

PreparedStatement

为啥即使没有争用,我的 Oracle PreparedStatement 有时也不会返回?