假设我有一个表单,并且基于用户在表单中填写的字段,我使用Java字符串和诸如“ field1 ='A'和field2 ='B'之类的子句的连接在Java代码中创建SQL语句。 field3 ='C'“,等等。如果未填写该字段,则跳过此部分,而不将其添加到我的Java SQL字符串中,从而接受数据库表中该字段中的任何值。有人告诉我,串联SQL字符串是一个坏习惯,我宁愿使用PreparedStatement而不是直接执行executeQuery。在这种情况下,如何为表单中当前字段的每个组合创建单独的PreparedStatement呢?
首先,在远离将字符串与字段值连接在一起方面做得很好。您只是摆脱了讨厌的SQL注入攻击。
您希望使用与以前相同的逻辑-相同的if
语句集,并且仅向存在该字段的SQL添加一个子句。在准备使用它们之前,您可能希望StringBuilder
构建一个SQL并ArrayList<String>
存储一个参数值。您可能最终会遇到很多看起来像这样的块。
if (! field1Text.equals("")) {
sql.append(" and field1 = ?");
params.add(field1Text);
}
然后,最后,在创建完之后PreparedStatement
,您将遍历参数列表,并调用setString
每个参数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句