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 子句中的主要内容,如果未能解决你的问题,请参考以下文章