如何将“变量”WHERE子句注入查询?

时间:2017-01-09 15:38:37

标签: java mysql sql where

我有一个问题:

SELECT * FROM table_name WHERE name=? surname=? gender=?;

我必须将字符串注入查询(我使用准备好的语句),但问题是这3个子句是可变的;根据用户的输入,我可以将0,1或所有3个子句激活。

如果用户没有为它输入任何内容,我如何“忽略”它们?

感谢所有人!

编辑:如果有人知道如何将setStrin()设置为preparedStatement而不让他将' '放在字符串周围,那也很好。

2 个答案:

答案 0 :(得分:3)

最简单的解决方案是动态构建预准备语句,如下所示:

String sql = "SELECT * FROM table_name";

if (nameInput != null || surnameInput != null || genderInput != null)
{
    sql += " WHERE ";
}

if (nameInput != null)
{
    sql += "name=? ";
}

我认为你从那里得到了其他输入的想法。

然后,您可以将sql的最终值与输入值一起传递到prepare来电。

答案 1 :(得分:1)

在没有任何复杂或昂贵的逻辑的情况下轻松完成,只需一行......

假设你的三个变量是@ name,@ somename和@gender。

还假设在不需要过滤器时将提供零长度字符串。

然后,您的Select语句就是:

text_item2=11000

这就是它的全部!没有复杂或昂贵的逻辑。