我有一个问题:
SELECT * FROM table_name WHERE name=? surname=? gender=?;
我必须将字符串注入查询(我使用准备好的语句),但问题是这3个子句是可变的;根据用户的输入,我可以将0,1或所有3个子句激活。
如果用户没有为它输入任何内容,我如何“忽略”它们?
感谢所有人!
编辑:如果有人知道如何将setStrin()设置为preparedStatement而不让他将' '
放在字符串周围,那也很好。
答案 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
这就是它的全部!没有复杂或昂贵的逻辑。