【问题标题】:How to fill a query sql with multiple optional parameter in PreparedStatement?如何在 PreparedStatement 中使用多个可选参数填充查询 sql?
【发布时间】:2011-11-26 08:45:46
【问题描述】:

我自己解释一下……

我有一个填写查询的表格(例如):

SELECT * 
FROM table 
WHERE id=? AND name=? AND sex=? AND year=? AND class=?

但只有“id”是强制性的,所有其他参数都是可选的。 我如何填写(或重新创建)该查询的 prerared 语句???

【问题讨论】:

    标签: java sql


    【解决方案1】:

    你要么必须使用多个准备好的语句,要么只是动态创建一个语句,检查你有哪些参数。

    像这样:

    String query = "SELECT * FROM table WHERE id=?";
    if( nameParameter != null ) {
      query += " AND name=?"; //don't never ever directly add the value here
    }
    ...
    

    更新/警告:不要直接将参数值添加到查询字符串中,而是使用PreparedStatement 等代替。如上所示,查询字符串应仅包含值的占位符(例如?),以防止 SQL 注入攻击。

    我的意思是,不要做以下事情

    if( nameParameter != null ) {
      //NEVER EVER, REALLY I MEAN IT, DON'T DO THIS
      query += " AND name='" + nameParameter + "'"; 
    }
    

    【讨论】:

    • tks...这是我使用的方式,似乎是“最干净”的方式
    • 我知道有用于动态查询生成的框架,但这似乎是许多情况下的最佳解决方案。 +1
    • 但是这种方式容易受到sql注入攻击。
    • @aishu 您仍然会使用 PreparedStatement 并使用该对象设置参数值。当然,您应该直接将值附加到查询字符串。我会在我的回答中添加一个警告。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 2018-03-03
    • 2017-11-28
    • 2018-08-21
    相关资源
    最近更新 更多