当前位置: 首页 > 面试题库 >

如何在PreparedStatement中使用多个可选参数填充查询sql?

易俊远
2023-03-14
问题内容

我解释自己

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

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

但只有“ id”为必填项,所有其他参数均为​​可选。如何填写(或重新创建)该查询的预声明?


问题答案:

您将不得不使用多个准备好的语句,或者只是在运行时创建一条语句,检查您拥有哪些参数。

像这样:

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 + "'"; 
}


 类似资料:
  • 问题内容: 我正在尝试在我的文档归档系统上为高级搜索页面编写查询。我正在尝试通过多个可选参数进行搜索。我有大约5个参数,它们可以是空字符串或搜索字符串。我知道我不必检查每个字符串或为空并为每个组合创建一个单独的存储过程。 编辑:最终使用: 问题答案: 您可以这样使用COALESCE(或ISNULL):

  • 我将编写此查询,它在Console中工作。sql或Workbench中,但当我在@Query中使用它时,我得到了一个语法错误! 在我的IDE中,错误是在下次选择

  • 问题内容: 我正在使用Eclipse Java EE进行Web应用程序项目。当前,我的应用程序返回数据库中存储员工个人信息的所有值。但是,我设置了默认的准备语句以搜索表employee_id = 1234,而不是登录员工的employee_id。这意味着无论哪个员工登录到我的系统,它都只会显示该员工的个人信息。 ID为1234,如下面的准备语句所示: 请注意上面的employeeID如何设置为12

  • 我不明白 FastAPI 中的可选查询参数。它与默认值为 的默认查询参数有何不同? 在下面的示例中,arg1和arg2有什么区别?在该示例中,arg2是一个可选的查询参数,如上面的链接所述。

  • 问题内容: 一般而言,我对Mongoose和MongoDB还是很陌生,所以我很难确定是否可以进行以下操作: 有更好的方法吗? 编辑 如有任何混淆,我们深表歉意。我想做的是获取所有包含有趣标签或政治标签的商品。 编辑 没有where子句的文档: 使用where子句,我得到一个空数组。 问题答案: 对于大于3.2的现代MongoDB,您可以在大多数情况下用作替代。这也有实际上做加盟,而不是什么“在服务

  • 我已经通读了文档,但这似乎对我不起作用。我跟踪了这个医生。但我不确定这是否与我要做的事情有关,我认为这个文档是用于传递这样的查询- 这是我的目标:api.site.com/test/(optional_field) 因此,如果有人转到“测试”endpoint,它会将可选字段默认为一个参数,但如果他们在那里添加一些内容,它会将其作为输入。 也就是说,这是我的代码: 我想做的是,如果他们只是在没有可选